3

このforeachループをlinqに移動しようとしています:

compData = componentData[0];
foreach (var componentTraceData in componentData)
{
     if (!string.IsNullOrEmpty(componentTraceData.CompName))
     {
          compData = componentTraceData;
          break;
     }
}

そして、これは私が試したものです:

var tt = (from n in componentData 
          where !string.IsNullOrEmpty(n.CompName) 
          select n).FirstOrDefault();

componentData[0]linqで結果が見つからなかった場合に備えて、どうすればよいですか?

4

3 に答える 3

11

現在持っている行を取得?? componentData[0]し、最後に追加します。

??null 合体演算子です。これは、「左にあるものが null の場合、右にあるものを返す。null でない場合は、それを返す」の省略形です。

于 2012-07-11T14:36:21.633 に答える
6

Enumerable.DefaultIfEmptyカスタムのデフォルト値を使用および指定できます。

var result = componentData.Where(n => !string.IsNullOrEmpty(n.CompName))
                          .DefaultIfEmpty(componentData.ElementAtOrDefault(0))
                          .First();

Firstシーケンスを空にすることはできなくなったため、安全に使用できるようになったことに注意してください。ソース シーケンスが空の場合は (参照型の場合は null)ElementAtOrDefaultを返します。これにより、直接default(T)のインデクサーを使用するときに例外が発生しなくなります。IList<T>

于 2012-07-11T14:41:45.913 に答える
2
var tt = componentData.FirstOrDefault(n=!string.IsNullOrEmpty(n.CompName)) ?? componentData[0];

componentDatanull ではなく、count/lengthも最初に 0 より大きいことを確認する必要があります。

于 2012-07-11T14:39:28.060 に答える