在方法中设置属性
本文关键字:属性 设置 方法 | 更新日期: 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();
}
}