【问题标题】:C#: Class does not contain a definitionC#:类不包含定义
【发布时间】:2017-11-05 13:12:35
【问题描述】:

我目前正在尝试通过名称搜索对象数组,并希望输出是数组的索引。但是,当我尝试调用我的搜索函数时发生错误(不包含定义)。我不知道如何解决这个问题。

我对编程很陌生,如果我做错了一切,请原谅我,请尽可能简单。

class Program
{
    static void Main(string[] args)
    {
        //Initialize array based on number of records
        RecordArray.Init(5);

        //Calling FindByName
        RecordArray.FindByName (RecordArray.rArray, "Name3");
    }
}

public class RecordClass
{
    //Declaring member variables
    public string Name;
    public int Number;
    public string Email;
}

public class RecordArray
{
    public static void Init(int Size)
    {
        //RNG for phone numbers
        Random Rnd = new Random();

        //Creating an array of RecordClass
        RecordClass[] rArray = new RecordClass[Size];

        //Loop through the array
        for(int i = 0; i < rArray.Length; i++)
        {
            rArray[i].Name = "Name" + i;
            rArray[i].Number = Rnd.Next();
            rArray[i].Email = rArray[i].Name + "@gmail.com";
        }
    }

    public static int FindByName(RecordClass[] rArray, string Name)
    {
        //Loop through rArray to find if Name matches. If match, return index. Otherwise, return -1.
        for(int i = 0; i < rArray.Length; i++)
        {
            if (rArray[i].Name == Name)
            {
                return i;
            }
        }

        return -1;
    }
}

}

【问题讨论】:

  • 此处粘贴代码的第 9 行,位于 RecordArray.FindByName (RecordArray.rArray, "Name3");错误发生在 rArray 下,它说:“RecordArray”不包含“rArray”的定义
  • 问题正是错误消息所说的。您尚未在班级中声明名为 rArray 的成员。请更仔细地阅读错误消息。一旦您不再将每个错误都视为具有相同的“编译器不会编译您的代码”含义,您可能会惊讶于它们的信息量。

标签: c# function delegates


【解决方案1】:

rarray 仅在函数中声明,因此您无法访问它。你可以试试这样的

public static RecordClass[] Init(int Size)
{
    //RNG for phone numbers
    Random Rnd = new Random();

    //Creating an array of RecordClass
    RecordClass[] rArray = new RecordClass[Size];

    //Loop through the array
    for(int i = 0; i < rArray.Length; i++)
    {
        RecordClass record = new RecordClass();
        record.Name = "Name" + i;
        record.Number = Rnd.Next();
        record.Email = record.Name + "@gmail.com";
        rArray[I] = record;
    }

    return rArray;
}




static void Main(string[] args)
{
    //Initialize array based on number of records

    //Calling FindByName
    RecordArray.FindByName (RecordArray.Init(5), "Name3");
}

【讨论】:

  • 错误消失了,但是当我运行程序时,它崩溃了。未处理的异常:System.NullReferenceException:对象引用未设置为对象的实例。
  • 我编辑了您创建记录的位置,因此它会在您尝试在 init 中为其分配值之前创建 RecordClass 的实例
【解决方案2】:

首先,让我先说几乎不需要编写自己的数组。
C# 语言和 .NET 框架支持数组和许多其他集合类型,所以真的不需要。

话虽如此,以下是您当前代码的问题:
RecordArray 类不包含名为 rArray 的成员。
为了使您的代码正常工作,您必须在 init 函数中分解这一行:

//Creating an array of RecordClass
RecordClass[] rArray = new RecordClass[Size];

分成两个单独的代码行。首先,你必须为rArray创建一个静态成员,其次,你在Init方法中初始化它:

public class RecordArray
{
    public static RecordClass[] rArray {get; private set;}

    public static void Init(int Size)
    {
        //RNG for phone numbers
        Random Rnd = new Random();

        //Creating an array of RecordClass
        rArray = new RecordClass[Size];

        //Loop through the array
        for(int i = 0; i < rArray.Length; i++)
        {
            rArray[i] = new RecordClass();
            rArray[i].Name = "Name" + i;
            rArray[i].Number = Rnd.Next();
            rArray[i].Email = rArray[i].Name + "@gmail.com";
        }
    }

    public static int FindByName(RecordClass[] rArray, string Name)
    {
        //Loop through rArray to find if Name matches. If match, return index. Otherwise, return -1.
        for(int i = 0; i < rArray.Length; i++)
        {
            if (rArray[i].Name == Name)
            {
                return i;
            }
        }

        return -1;
    }
}

【讨论】:

  • 错误现在消失了,但我遇到了崩溃。未处理的异常:System.NullReferenceException:对象引用未设置为对象的实例。
  • 我的代码少了一行:rArray[i] = new RecordClass();。现已修复。
  • I'm not...。你一定在做我没有做的事……
  • omg 显然我没有删除我正在测试的行...现在知道了!非常感谢!
  • hm,我尝试在RecordClass下创建一个对象,然后在数组下引用它。它看起来与您的代码相同,但现在无法正常工作... Rextester 链接:rextester.com/IZGH51550
猜你喜欢
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多