2

foreach ループを設定するためにラムダ ステートメントを使用しています。

foreach (Shape shape in shapefile.Where(x=>x.GetMetadata(IgnoreField) != IgnoreValue))

IgnoreFieldおよびオプションIgnoreValueのパラメータです。

これらのフィールドが空白 (使用されていない) の場合、それを考慮して foreach を変更するにはどうすればよいですか? Else ステートメントまたはそのようなものはありますか?

4

4 に答える 4

4

あなたが望むのは...それらがnullでない場合...それらをチェックすることだと思いますが、それらがnullの場合は無視しますか?

foreach (Shape shape in shapefile.Where(x=>
   x.IgnoreField == null ||
   x.IgnoreValue == null ||
   x.GetMetadata(IgnoreField) != IgnoreValue)

また、LinQ をインデントすると、LinQ が何をしているかがとても簡単にわかることに注目してください。

特にこのような foreach ステートメントで使用する別のフォーマット手法は、列挙型を foreach ステートメントで使用する前に、適切な名前の変数に格納することです...

var shapesFilteredByIgnores = shapefile.Where(x=>
   x.IgnoreField == null ||
   x.IgnoreValue == null ||
   x.GetMetadata(IgnoreField) != IgnoreValue)

foreach (Shape shape in shapesFilteredByIgnores)

もちろん、これは、変数に割り当てる意味のある変数名がある場合にのみ明確になります。

于 2013-07-18T22:51:30.710 に答える
3

それは魔法ではありません。ラムダの外で使用したものとまったく同じものを使用します。

foreach (Shape shape in shapefile.Where(x=>
   (x.IgnoreField != null && // If both optional fields are present
   x.IgnoreValue != null &&
   x.GetMetadata(IgnoreField) != IgnoreValue) // Then only where metadata for 
                                              // ignored field is not the ignored value
   ||
   (x.IgnoreField == null || x.IgnoreValue == null))) // But if either field absent
                                                      // then return all data
于 2013-07-18T22:45:28.750 に答える
2
foreach (Shape shape in shapefile.Where(x=>IgnoreField==null || IngoreValue==null || x.GetMetadata(IgnoreField) != IgnoreValue))
于 2013-07-18T22:46:33.003 に答える