首页 > 解决方案 > C#中结构和类之间的变量初始化区别是什么

问题描述

我知道有一个类似的问题:.NET 中的结构和类有什么区别?

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

简而言之,我的 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++;
            }
        }

提前谢谢

标签: c#asp.net.netclassstruct

解决方案


在您的示例中,people[i]永远不会初始化。

不同之处在于类的默认值是null,而结构不能为空。您的默认struct Person值已分配。虽然 aclass只是一个指向 null 的指针,直到您对其进行初始化。

你需要做

while (dr.Read() && i < applicablePeople)
{
    people[i] = new Person()
    // ...

推荐阅读