C#中的通用对象列表

时间:2011-05-11 21:59:55

标签: c# asp.net asp.net-mvc-3

我有一个简单的类,包括2个属性,一个String和一个通用对象列表。它看起来像这样:

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 Controller)中,我试图手动填充此类。请记住,当我使用默认模型绑定器将数据从网络表单传递到此类时,这样就可以很好地填充。

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

        Guid id = Guid.NewGuid();

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

        _searchFields.Fields.Add(_searchField);

当我这样做时,我得到一个名为“IDGUID”的属性的填充类,但是对象的通用列表返回null。

当我调试代码并遍历它时,虽然数据似乎都在那里并正在我正在进行,但是当我通过并检查_searchFields时它没有在Fields的Value属性中显示任何内容。

想法?

提前致谢。

汤姆 tlatourelle

2 个答案:

答案 0 :(得分:4)

当getter为null时,您似乎永远不会设置_value。尝试

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

答案 1 :(得分:2)

_value永远不会设置为List<Object>的实例;它总是为空。发生了什么事情是您要返回一个新的List<Object>并向其中添加Object,但您会立即丢弃新创建的List<Object>

您需要将Value的定义更改为以下内容:

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