Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c中列表的null异常#_C#_List_Properties_Automatic Properties - Fatal编程技术网

C# c中列表的null异常#

C# 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

嘿,我试图在C#中使用一个通用列表,由于某种原因,在为该列表分配内存后,我得到了unhandledNullException

 //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; }
}