我有一种情况,我需要在对象初始化器中分配一些对象的属性。这些对象中的一些可以为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
在该项目中工作,有没有办法模仿它?
好吧,您可以使用扩展方法来接收访问者委托,并且仅在项目不是时才执行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())
)或返回值类型的操作轻松创建此方法的版本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句