gpt4 book ai didi

c# - 有没有办法在 C# 5 中模仿 C# 6 空条件运算符

转载 作者:太空狗 更新时间:2023-10-29 22:57:59 25 4
gpt4 key购买 nike

我有一种情况需要在对象初始值设定项中分配一些对象的属性。其中一些对象可以为 null,我需要访问它们的属性,问题是它们太多了,使用 if/else 并不好。

示例

visits = visitJoins.AsEnumerable().Select(joined => new VisitPDV()
{
VisiteId = joined.Visite.VisiteId.ToString(),
NomPointDeVente = joined.VisitePdvProduit.PointDeVente.NomPointDeVente,
});

joined.VisitePdvProduit 可以为空,问题是有几十个这样的赋值(我只拿了一个来缩短代码)

C# 6 Null-Conditional operator 是这种情况的完美解决方案,问题是我在 C# 5 中这个项目,有办法模仿吗?

最佳答案

好吧,您可以使用一种扩展方法来接收访问器委托(delegate),并且仅在项目不是 null 时才执行它:

public static TResult ConditionalAccess<TItem, TResult>(this TItem item, Func<TItem, TResult> accessor) where TResult : Class
{
if (item == null)
{
return null;
}
else
{
return accessor(item);
}
}

你可以像这样使用它:

NomPointDeVente = joined.VisitePdvProduit.ConditionalAccess(_ => _.PointDeVente.NomPointDeVente);

您可以轻松地为不返回值(即 bar.ConditionalAccess(_ => _.Foo()) )或返回值类型的操作创建此方法的版本。

关于c# - 有没有办法在 C# 5 中模仿 C# 6 空条件运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34027716/

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