gpt4 book ai didi

c# - 类型转换调用链中的 Elvis 运算符

转载 作者:太空狗 更新时间:2023-10-29 23:44:15 26 4
gpt4 key购买 nike

elvis 运算符,又名 null 条件运算符,非常酷。

在 LINQ 查询中,它与 null 合并“??”一起工作得很好运营商。

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);

可能在这里不止一次搞砸了括号,但我希望你能理解。

虽然这个“trainwreck”调用链是一种代码味道,但是否有一种更具表现力的方式来提高简洁性和清晰度?

最佳答案

您可以使用一个非常简单的扩展方法来保持链接并避免括号:

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;
}
}

关于c# - 类型转换调用链中的 Elvis 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35061566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com