Tor*_*mod 5 c# linq null-coalescing-operator c#-6.0 null-conditional-operator
elvis运算符,即null条件运算符,非常酷.
在LINQ查询中,它与null合并"??"一致很好用 运营商.
Somedata.Where(dt=>(dt?.Inner?.InnerMost?.Include=="Yes")??false);
Run Code Online (Sandbox Code Playgroud)
但是如果你需要施放中间值,你会怎么做?
对于链中的一个链接,它可以正常工作.
Somedata.Where(dt=>(
((InnerClass)dt?.Inner)
?.InnerMost)?.Include=="Yes")
??false);
Run Code Online (Sandbox Code Playgroud)
但是通过额外的必要施法,施法和调用被"驱散".
Somedata.Where(dt=>(
((InnerMostClass) <=== Cast
((InnerClass)dt?.Inner)
?.InnerMost)?.Include=="Yes")) <=== Use
??false);
Run Code Online (Sandbox Code Playgroud)
可能在这里不止一次弄乱了括号,但我希望你明白这个想法.
虽然这个"火车残骸"调用链是一种代码味道,但这样做是否有更具表现力的方式来提高简洁性和清晰度?
您可以使用非常简单的扩展方法来保持链接并防止括号:
dt?.Inner.As<InnerClass>()?.InnerMost.As<InnerMostClass>()?.Include == "Yes"
Run Code Online (Sandbox Code Playgroud)
扩展方法定义如下:
public static class ObjectExtensions
{
public static T As<T>(this object obj) where T : class
{
return obj as T;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
445 次 |
| 最近记录: |