在我看来,我用简单的方式写出linq语句,但其他人可能将其定义为冗长的方式;
一个简单的例子:
return _entries
.Where(x => x.Context.Equals(context))
.Where(x => x.Type == typeof (T))
.Select(x=>x.Value)
.Cast<T>()
.Single();
Run Code Online (Sandbox Code Playgroud)
可以简化为:
return _entries
.Where(x => x.Context.Equals(context) && x.Type == typeof (T))
.Select(x=>(T)x.Value)
.Single();
Run Code Online (Sandbox Code Playgroud)
[问题] 从长远来看,哪种编码方式更好?即长(和简单)linq链或短linq链与更复杂的选择器/等?
假设这些Linq语句将由编译器优化是正确的吗?
不,假设这些LINQ语句由编译器优化是不对的.更详细的语法会产生更多Enumerator对象,因此两者不等效.从性能角度来看,较短的语法(稍微)会更好.
但是,如果从可读性和编码的角度选择两种语法,我会选择第一种,因为它显示了更好的步骤.我总是喜欢可读性高于性能,除非你能证明存在性能瓶颈.
但是,您可能会发现OfType<T>()LINQ运算符很有用.你的第一个例子,重写:
return _entries
.Where(x => x.Context.Equals(context))
.OfType<T>()
.Select(x => (T)x.Value)
.Single();
Run Code Online (Sandbox Code Playgroud)