ほとんどの人が知らない代替手段があります ( select a into b
):
var q = from PropertyDescriptor t in TypeDescriptor.GetProperties(instance)
select t.ComponentType.GetProperty(t.Name) into u
where u != null
select u;
これは次のように変換されます。
var q = TypeDescriptor.GetProperties(instance)
.Select(t => t.ComponentType.GetProperty(t.Name))
.Where(prop => prop != null);
ベースのlet
バージョンは次のように変換されます。
var q = TypeDescriptor.GetProperties(instance)
.Select(t => new { t, prop = t.ComponentType.GetProperty(t.Name) })
.Where(x => x.prop != null)
.Select(x => x.prop);
t
まだスコープ内にある (まだ使用されていない)ため、アイテムごとの不要な割り当て。C# コンパイラはそれを最適化する必要がありますが、そうではありません (または、言語仕様で許可されていません)。