2016-12-27 10 views
1

誰かがこれを重複としてマークすることにしましたが、コミュニティに質問するクリーンアップに感謝しますが、私の質問を投稿する前に。私の質問に示されているように、問題の問題のアウトプットを示します。ヌルはありません。Array.FindIndexを使用したNull例外がC#の文字列配列で検索されています

私はこのようになりますスピナー値選択するユーザーに基づいて作成する方法があります:あなたが見ることができるように

public void terrain_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e) 
    { 
     Spinner spinner = (Spinner)sender; 
     var ttype = string.Format("{0}", spinner.GetItemAtPosition(e.Position)); 
     Console.WriteLine(ttype); 
     foreach (var item in Terrainstr) { Console.WriteLine(item); } 
     var index = Array.FindIndex(Terrainstr, x => x.Contains(ttype)); 

を、文字列TTYPEは、単にユーザーがスピナとなすの選択です。

は、私はそのTerrainstr文字列配列は次のようにOnCreateの前に初期化されますがあります。

string[] Terrainstr = new string[10]; 

私は、ユーザーの選択の数に基づいて、文字列の断片と、後でそれを取り込みます。

メソッドにConsole.WriteLineコマンドがあります。その方法が使用されているマイ(注釈付き)出力は次のようになります。私はTerrainstrのindecesがTTYPEを含んでいる見つけたい

Fast (ttype) 
Stock (Terrainstr[0]) 
Slow 
Slow Sand 
Slow Sand Rocks Whoops 
Slow Sand Mud Rocks Whoops 
Slow Mud Rocks Whoops 
Slow Mud Rocks (Terrainstr[6]) 

。この場合、それはまったく適合しません。ここに示すコマンドを使用してnull例外が発生します。

var index = Array.FindIndex(Terrainstr, x => x.Contains(ttype)); 

助言を受けてください!

答えて

2

基本的に、配列のサイズは10で、その中には8個の要素しかありません(Console.WriteLine出力に基づく)ので、最後の2つはnullです。

Array.FindIndex要素がnullであるかどうかを確認せず、.Containsを実行しようとするラムダに渡します。それがヌルの場合はNullReferenceExeceptionになります。

配列をフィルタリングして、ヌル以外の要素にのみFindIndexを配置します。

var index = Array.FindIndex(Terrainstr, x => x != null && x.Contains(ttype)); 
関連する問題