Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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中struct和class的变量初始化有什么区别#_C#_Asp.net_.net_Class_Struct - Fatal编程技术网

C# C中struct和class的变量初始化有什么区别#

C# C中struct和class的变量初始化有什么区别#,c#,asp.net,.net,class,struct,C#,Asp.net,.net,Class,Struct,我知道有一个类似的问题: 但我的情况更具体,所以如果我能得到答案,我将不胜感激。 我有一个类来表示某种类型,当我试图设置这个类值的数组时,它会抛出null引用异常,但当我使用struct时,它不会。由于另一个限制,我需要使用一个类。我如何才能做到这一点 简而言之,我的c代码: public class Person { public string name; public string imageLocation; public string location;

我知道有一个类似的问题:

但我的情况更具体,所以如果我能得到答案,我将不胜感激。 我有一个类来表示某种类型,当我试图设置这个类值的数组时,它会抛出null引用异常,但当我使用struct时,它不会。由于另一个限制,我需要使用一个类。我如何才能做到这一点

简而言之,我的c代码:

public class Person
{
    public string name;
    public string imageLocation;
    public string location;

    public Person()
    {
        name = "";
        imageLocation= "";
        location = "";

    }
}
在同一命名空间中的另一个类中:

        int i = 0;
        Person[] people = new people[applicablePeople];
        using (SqlDataReader dr = cmd.ExecuteReader())
        {
            while (dr.Read() && i < applicablePeople)
            {
                people[i].name= dr["Name"].ToString();
                people[i].imageLocation= dr["ImageLocation"].ToString();
                people[i].location = dr["Location "].ToString();
                i++;
            }
        }
inti=0;
人员[]人员=新人员[适用人员];
使用(SqlDataReader dr=cmd.ExecuteReader())
{
while(dr.Read()&&i

thnx预先

在您的示例中,
人员[i]
从未初始化

区别在于类的默认值为
null
,而结构不能为null。您的默认
struct Person
已分配。而
在初始化之前只是指向null的指针

你需要做什么

while (dr.Read() && i < applicablePeople)
{
    people[i] = new Person()
    // ...
while(dr.Read()&&i
Person[]people=new people[applicatablepeople];
数组初始化时,还需要为数组中的每个项创建Person类的对象。对于struct,不需要创建/分配内存,因为它们是引用类型