是否可以使用以下内容,或者您是否必须返回列表并在之后分配?我得到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();
答案 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();
}
}