在方法内设置属性

时间:2014-06-02 20:04:12

标签: c#

是否可以使用以下内容,或者您​​是否必须返回列表并在之后分配?我得到object reference not set to instance of an object

public class MyCollection
{
    public List<SomeObject> Collection { get; set; }

    public List<SomeObject> CreateCollection()
    {
        // Is there a way to set the Collection property from here???
        this.Collection.Add(new SomeObject()
        {
            // properties
        });

    }
}

...

MyCollection collection = new MyCollection();                    
collection.CreateCollection();

4 个答案:

答案 0 :(得分:2)

是的,您可以使用对象初始值设定项:

public List<SomeObject> CreateCollection()
{
    // You may want to initialize this.Collection somehere, ie: here
    this.Collection = new List<SomeObject>();

    this.Collection.Add(new SomeObject
    {
        // This allows you to initialize the properties
        Collection = this.Collection
    });
    return this.Collection;
}

请注意,这仍然可能存在问题 - 您永远不会在您正在显示的任何代码中初始化this.Collection。您需要在构造函数中或通过其他一些机制将其初始化为适当的集合。

拥有&#34;创建&#34;这也是一个奇怪的选择。初始化局部变量的方法返回List<T>。通常情况下,您要做其中一个。更常见的方法是将此代码放在构造函数中:

public class MyCollection
{
    public IList<SomeObject> Collection { get; private set; } // The setter would typically be private, and can be IList<T>!

    public MyCollection()
    {
        this.Collection = new List<SomeObject>();
        this.Collection.Add(new SomeObject
        {
            Collection = this.Collection
        });
    } 
}

然后您可以通过以下方式使用它:

MyCollection collection = new MyCollection();                    
var object = collection.Collection.First(); // Get the first element

话虽如此,一般来说,没有真正的理由为大多数情况下这样的集合制作自定义类。直接使用List<SomeObject>通常就足够了。

答案 1 :(得分:1)

这是完全可能的 - 你必须首先实例化它,然后才能使用它:

public List<SomeObject> CreateCollection()
{
    this.Collection = new List<SomeObject>(); // this creates a new list - the default if you just define a list but don't create it is for it to remain null
    this.Collection.Add(new SomeObject()
    {
        // whatever
    });
}

当然,正如评论中所指出的,如果你希望该函数返回一个列表,它实际上必须返回列表。大概你的意思是public void CreateCollection(),因为这是你的问题,你是否真的必须返回一个列表(答案:否)。

答案 2 :(得分:0)

在向其中添加元素之前,您必须初始化this.Collection

public List<SomeObject> CreateCollection()
{
    this.Collection = new List<SomeObject>();
    this.Collection.Add(new SomeObject()
    {
        // properties
    });

}

答案 3 :(得分:0)

在这种情况下,您可以使用列表初始值设定项:

public class Person
{
    public string Name { get; set; }
    public string Firstname { get; set; }
}
class Program
{
    public static List<Person> Collection { get; set; }

    public static List<Person> CreateCollection()
    {

        return new List<Person>()
        {
            new Person() { Name = "Demo", Firstname = "Demo1"},
            new Person() { Name = "Demo", Firstname = "Demo1"},
        };

    }

    static void Main(string[] args)
    {
         Collection = CreateCollection();
    }
}