elvis运算符,即null条件运算符,非常酷。
在LINQ查询中,它与null-coalescing" ??"操作
Somedata.Where(dt=>(dt?.Inner?.InnerMost?.Include=="Yes")??false);
但是如果你需要施放中间值,你会怎么做?
对于链中的一个链接,它可以正常工作。
Somedata.Where(dt=>(
((InnerClass)dt?.Inner)
?.InnerMost)?.Include=="Yes")
??false);
但是通过额外的必要演员阵容,演员阵容和调用将被分开"。
Somedata.Where(dt=>(
((InnerMostClass) <=== Cast
((InnerClass)dt?.Inner)
?.InnerMost)?.Include=="Yes")) <=== Use
??false);
这里可能不止一次弄乱了括号,但我希望你明白这个想法。
虽然这&#34;训练残骸&#34;调用链是一种代码气味,是否有更具表现力的方式来提高简洁性和清晰度?
答案 0 :(得分:1)
您可以使用非常简单的扩展方法继续链接并阻止括号:
dt?.Inner.As<InnerClass>()?.InnerMost.As<InnerMostClass>()?.Include == "Yes"
使用如下定义的扩展方法:
public static class ObjectExtensions
{
public static T As<T>(this object obj) where T : class
{
return obj as T;
}
}