2016-06-20 13 views
0

文字列の配列に従っています。各文字列のデフォルト値はstring.Emptyに設定されています。そして、この配列はfuctionによって返されます。今、私はnullではないそれらのインデックスだけを印刷したいと思います。私は各インデックスにif-elseを使うことができますが、それは8つのアイテムを通過するための非常に長い方法です。私は値がnullある場合は、Selectを使用したインデックスを返すことができnulllていない項目のみCで文字列配列のインデックスのみを出力する#

string [] muniSearches = {airSearchReport, certOfOccupancy, emerRepair, fire, fZone,foSearch, health, hsVoilation}; 
+0

8つの項目のためのforループ –

+0

aが長くない場合は、他の私は、従来でみました! :P – BugFinder

答えて

4

を印刷できるように、任意の短い方法があります:

var indexesNotNull = muniSearches.Select((v, i) => new { Value = v, Index = i }) 
           .Where(x => x.Value != null) 
           .Select(x => x.Index); 

それとも単に使用しますforループ:

List<int> indexesNotNull = new List<int>(); 
for (int index = 0; index < muniSearches.Length; index++) 
{ 
    if (muniSearches[index] != null) 
    { 
     indexesNotNull.Add(index); 
    } 
} 
+1

私はstring.IsNullEmpty(muniSearches [index])を使用することをお勧めします。OPは文字列がstring.emptyとして初期化されるかもしれないと言っています。 – lokusking

+0

空の文字列がデフォルトでOPがnullを知りたい場合は、これが問題に合った答えです。質問が異なる場合は、正しいかもしれません。 –

+0

Tbh、私はOPがnullとstring.Empty;を混ぜていると思う) – lokusking

1

値やインデックスが必要かどうかはっきりしませんでした。 値を必要としていて、linqを文脈で使うことができれば、それはかなり単純です。

muniSearches 
.Where(s => !string.IsNullOrEmpty(s)) 
.ToList() 
.ForEach(Console.WriteLine); 

インデックスが必要な場合は、もう一度実行できますが、もう少し複雑になります。ような何か:

muniSearches 
.Select((s, i) => new {value = s, index = i}) 
.Where(o => !string.IsNullOrEmpty(o.value)) 
.Select(o => o.index) 
.ToList() 
.ForEach(Console.WriteLine); 
+0

OPが尋ねるように、あなたはどこでインデックスを提供しますか? –

+0

2番目のオプションで更新されているかどうかは不明です。 – Ian

0

あなたはラムダ式に構文を使用して、その文字列の長さをチェックし、その中に任意のデータを持つ文字列のインデックスを格納することができます。

var Indexes = muniSearches.Select((Value, Index) => new { Value , Index }) .Where(x => x.Value.Length > 0) .Select(x => x.Index);

関連する問題