2016-09-01 3 views
-2

このコードは、誰かが男性か女性かを検出するはずです。本質的に、私たちは電話でさまざまな人々に私たちをつなぐソフトウェアを持っていて、その名前はすぐに利用できます。これは(理論上は)配列内の人の名前と性別を検出し、それを私たちのフォームに入力することです。私はここにコードのサンプルを少し載せました。具体的には機能していない部分があります。あなたの誰かがこれがどうしてか分からないのだろうかと思いました。C#配列の問題。変数に配列インデックスを保存することができません

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 


namespace GenderChecker 
{ 
class Class 
{ 

    public static void Check(string stringy) 
    { 
     int gender = 0; 
     string[] arrayexample = { "Example One Male", "Example Two Female" }; 
     if (arrayexample.Contains(stringy)) 
     { 
      int arrayPosition = arrayexample.IndexOf(arrayexample, stringy); //part that doesn't work 
     } 
    } 

    static void Main(string[] args) 
    { 
     genderChecker("Example One"); 
    } 
} 
} 

は、誰も私にこのコードは全く動作しません、それは少し腹立たしいですので、整数として配列の位置を保存する別の方法を伝えることができます。

は、二回以上 MTS

+0

'names.IndexOf(arrayexample、stringy);の名前は何ですか? –

+0

これは編集されていないコードのものです私はOPをちょっとだけ修正します。 – MTS

+0

あなたのコードが投稿された状態では、配列に "Example One"という文字列が要素の1つとして含まれていないため、 "動作しない部分"の行は決してヒットしません(Containsコールは返されません真実)。 –

答えて

4

IndexOfメソッドは、()配列クラスの静的メソッドです。

代わりにこれを行う:文字列は配列ではありません

arrayPosition = Array.IndexOf(arrayexample, stringy); 

場合、それは-1を返します

1

あなたのコードがループをいただきありがとうございます。あなたはforループを使う方が良いでしょうか?

public static void Check(string stringy) 
{ 
    int gender = 0; 
    string[] arrayexample = { "Example One Male", "Example Two Female" }; 
    var arrayPosition = -1; 
    for (var i = 0; i < arrayexample.Length; i++) 
    { 
     if (arrayexample[i] == stringy) 
     { 
     arrayPosition = i; 
     break; 
     } 
    } 
} 
+0

@Am_I_Helpful Array.IndexOfはどのように実装されていると思いますか?そしてArray.Contains? – Casey

+0

@Am_I_Helpful IndexOfとContainsをどのように実装しなければならないか考えてみたら、なぜ私はそれを言ったのか理解するでしょう。 – Casey

+0

公正であるために、IndexOfを単独で使用することもできます。値が見つからない場合は-1を返します。 – Casey

0
public static void Check(string stringy) 
    { 
     int gender = 0; 
     string[] arrayexample = { "Example One Male", "Example Two Female" }; 
     for(int I=0;i<arrayexample.Length;i++) 
     { 
      if (arrayexample[i].Contains(stringy)) 
      { 
      int arrayPosition = i; //part that doesn't work 
      } 
     } 
    } 
+0

そして、0以外の何かで私を初期化すれば、それはインデックス0にあるので "Example One Male"と比較して見逃します。 –

0

はこれを試してみてください。 インデックス内に配列パラメータを含める必要はありません。

int arrayPosition = arrayexample.IndexOf(stringy);

0

コメントに基づいて、実際に配列内の文字列を検索しようとしていません。あなたは何ですか実際にしようとすると、性別に文字列をマップします。あなたはその仕事のために完全に間違ったツールを使用しています(あなたの人生を困難にしています)。辞書は値を他の値にマップします。彼らはあなたが必要とするものです。

public enum Gender { Male, Female } 
private Dictionary<string, Gender> _mapping = new Dictionary<string, Gender> { 
    ["Name One"] = Gender.Male, 
    ["Name Two"] = Gender.Female, 
}; 
// now do something with _mapping[name] 
+0

Hm、コメントはまた、部分一致を期待していると示唆しています。 。 – Casey

関連する問題