C# c中列表的null异常#
嘿,我试图在C#中使用一个通用列表,由于某种原因,在为该列表分配内存后,我得到了unhandledNullExceptionC# c中列表的null异常#,c#,list,properties,automatic-properties,C#,List,Properties,Automatic Properties,嘿,我试图在C#中使用一个通用列表,由于某种原因,在为该列表分配内存后,我得到了unhandledNullException //edit 我发现了我的问题所在,因为我现在没有使用这些属性。 如果说GeoInfo是我的类的私有成员,我该如何对它进行属性处理, 我试过: private List<GeoInfo> GEOINFOS { get; set; } // edit i forgot to change it back // but i want to have my
//edit
我发现了我的问题所在,因为我现在没有使用这些属性。
如果说GeoInfo是我的类的私有成员,我该如何对它进行属性处理,
我试过:
private List<GeoInfo> GEOINFOS { get; set; } // edit i forgot to change it back
// but i want to have my geoinfos private and my properties public
private List GEOINFOS{get;set;}//edit我忘了把它改回去
//但我想让我的地理信息系统私有,我的财产公开
提前感谢您的帮助如果您希望一处房产是私人的,请使用
private List<GeoInfo> GEOINFOS { get; set; }
private List GEOINFOS{get;set;}
但是,没有太多的理由为私有成员变量使用auto属性(也不要忘记初始化该列表)。如果您希望验证,那么可以,但您只是将该属性用作私有变量
空引用问题可能来自未初始化基础属性变量。这不是自动完成的,所以
public MyClass()
{
GEOINFOS = new List<GeoInfo>();
}
publicmyclass()
{
GEOINFOS=新列表();
}
还有一件事:对于C#,属性的命名约定很奇怪。保持一致并使用GeoInfos怎么样?您已将这些属性设置为私有属性。如果您想让它们公开,请尝试:
public List<GeoInfo> GeoInfos { get; set; }
这确保了您不必在构造函数中指定调用,也不必担心在获取元素之前显式设置元素的执行顺序
但是如果使用自动生成的属性,则必须在某个点显式设置引用。正如其他地方所建议的,最好的选择是构造函数。是
未处理的异常
或ArgumentNullException
-请澄清。而且,代码本身并没有什么固有的错误——我认为您必须添加更多的上下文;理想情况下,这是一个可复制的例子。这条线本身看起来不错。你能发布更多的代码吗?可能是其他原因造成的。请发布一个简短但完整的程序来演示这个问题。这可能很简单,但我们不能仅仅从这句话中分辨出来。为什么要为列表设置一个公共设置器?你对一个属性的名字也不寻常。对于一个完全私有的汽车属性,你会使用private List GeoInfos{get;set;}
。就像@Luke说的,一个带有private getter+setter的公共属性是不会飞的。但是+1对于命名建议,我不希望我的财产是私有的,我希望它们是公共的,我对这个公共关键字做了三次尝试。不,我确实看到了私人汽车物业的原因。同样的道理也适用,只是不那么有说服力。。。对不起,我不知道我在想什么。我很忙。固定的。使用私有getter/setter拥有公共属性是没有意义的@汉斯:我不知道你的理由是什么,一个私人汽车财产。如果您决定以后要进行验证,那么更改就像更改私有字段的名称一样简单。我的意思是,这不痛,但毫无意义。
private List<GeoInfo> geoInfos = new List<GeoInfo>;
public List<GeoInfo> GeoInfos {
get { return geoInfos; }
set { geoInfos = value; }
}
private List<GeoInfo> geoInfos = new List<GeoInfo>;
public List<GeoInfo> GeoInfos {
get { if (geoInfos == null) {
geoInfos = new List<GeoInfo>;
}
return geoInfos;
}
set { geoInfos = value; }
}