2017-11-05 50 views
0

現在、名前でオブジェクトの配列を検索しようとしていますが、出力を配列のインデックスにしたいとします。ただし、検索機能を呼び出そうとしたときにエラーが発生しました(定義は含まれていません)。私はこの問題をどのように解決するか考えていません。C#:クラスに定義がありません

私は非常にプログラミングに新しいので、私はすべて間違っていると私を許し、できるだけシンプルなものを保ってください。あなたは文句を言わない、それへのアクセス権を持っているので、

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

}

+0

コードの行は、例外をスローします:まず、あなたがrArrayの静的メンバを作成する必要があり、第二、あなたはInit方法でそれを初期化?例外が発生したときのさまざまな変数の値は何ですか? –

+0

貼り付けられたコードの9行目は、 にあります。 RecordArray.FindByName(RecordArray.rArray、 "Name3"); エラーがrArrayで発生し、以下のように表示されます。 'RecordArray'に 'rArray'の定義が含まれていません – deadsea2004

+0

問題はエラーメッセージの内容とまったく同じです。あなたはクラス内で 'rArray'という名前のメンバーを宣言していません。エラーメッセージをより注意深くお読みください。同じ「コンパイラがコードをコンパイルしない」という意味で過去のあらゆるエラーを処理してしまえば、どれほど有益なのかに驚くかもしれません。 –

答えて

0

rarrayは、機能だけで宣言されています。このようなことを試すことができます

+0

エラーは消えますが、プログラムを実行するとクラッシュしました。 未処理の例外:System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。 – deadsea2004

+0

レコードを作成する場所を編集して、レコードクラスのインスタンスを作成してから、initにその値を割り当てます。 –

0

最初に、自分のアレイを書く必要はほとんどないと言って始めましょう。
C#langangeと.NETフレームワークは配列や他の多くのコレクション型をサポートしているので、実際には必要ありません。
はメンバーが含まれていないクラスRecordArrayrArrayと呼ば :

はここにあなたの現在のコードと間違って何である、と述べました。動作するようにあなたのコードの場合
、あなたはinit関数では、この行を分割する必要があります。二つの別々のコード行に

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

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; 
    } 
} 
+0

エラーは消えましたが、クラッシュしています。 未処理の例外:System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。 – deadsea2004

+0

私のコードに行がありませんでした: 'rArray [i] = new RecordClass();'。今修正されました。 –

+0

スタックオーバーフロー例外の取得中... – deadsea2004

関連する問題