C#中的通用对象列表

3

我有一个简单的类,包括两个属性,一个是字符串类型,另一个是泛型对象列表。它看起来像这样:

public class SessionFieldViewModel
{
    private String _name;
    public String Name
    {
        get { return _name; }
        set { _name = value; }
    }

    private List<Object> _value;
    public List<Object> Value
    {
        get { return _value ?? new List<Object>(); }
        set { _value = value; }
    }
}

在我的主要代码(MVC控制器)中,我试图手动填充这个类。请注意,当我使用默认模型绑定程序将数据从Web表单传递到此类时,它会被正确地填充。

当尝试手动创建记录并将其添加到列表中时,我会这样做:

        Guid id = Guid.NewGuid();

        var _searchField = new SessionFieldViewModel();
        _searchField.Name = "IDGUID";
        Object _object = (Object)id;
        _searchField.Value.Add(_object);

        _searchFields.Fields.Add(_searchField);

当我这样做时,我会得到一个填充了"IDGUID"名称属性的类,但对象的通用列表返回为空。
当我调试代码并按步骤执行时,数据似乎都在那里并且正常工作,但是当我经过并检查_searchFields时,它不显示任何字段值。
有什么想法吗?
谢谢。
汤姆(tlatourelle)

通用列表在哪里会变成null?模型绑定器用于绑定来自HTTP请求的值。你的视图是什么样子的?POST操作呢?为什么要使用List<object>?当你不知道编译时的类型时,为什么要使用泛型?看起来有点无用。 - Darin Dimitrov
2个回答

4

在getter方法中,当_value为null时,似乎你没有设置它的值。尝试按如下方式处理:

public List<Object> Value
{
    get { return _value ?? (_value = new List<Object>()); }
    set { _value = value; }
}

很好的发现。我没有看到那个问题。另外,由于这段代码也通过默认模型绑定器工作,并在另一个用例中返回实际值,我没有考虑到这部分会出错。 - tlatourelle

2

_value 从未被设置为 List<Object> 的实例;它总是为 null。发生的情况是,您返回了一个新的 List<Object> 并向其中添加了一个 Object,但是你立即丢弃了这个新创建的 List<Object>

您需要更改 Value 的定义,例如:

private List<Object> _value = new List<Object>();
public List<Object> Value
{
    get { return _value; }
    set { _value = value; }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接