在方法中设置属性

本文关键字:属性 设置 方法 | 更新日期: 2023-09-27 18:06:22

是否可能出现以下情况,或者您是否必须返回列表并在之后分配它?我得到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();

在方法中设置属性

是的,你可以使用对象初始化器:

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。您需要在构造函数中或通过其他机制将其初始化为合适的集合。

这也是一个奇怪的选择,有一个"创建"方法初始化局部变量返回一个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>通常就足够了。

这是完全可能的——你只需要先实例化它,然后才能使用它:

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(),虽然,因为这是你的问题,你是否真的必须返回一个列表(答案:否)。

在添加元素之前必须初始化this.Collection

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

在这种情况下可以使用列表初始化器:

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();
    }
}