相关疑难解决方法(0)

"如果object为null,则为null;如果object为null,则为object.member"的快捷方式

我正在尝试编写一个通用扩展方法,让我这样做:

this.startDate = startDateXAttribute.NullOrPropertyOf<DateTime>(() =>
{
    return DateTime.Parse(startDateXAttribute.Value);
});
Run Code Online (Sandbox Code Playgroud)

NullOrPropertyOf()将返回null如果它是一个上使用的null对象(例如,如果startDateXAttributenull),或返回的结果Func,如果它不为空.

这种扩展方法会是什么样的?

c# generics

8
推荐指数
1
解决办法
6154
查看次数

Nullsafe在c#中导航

可能重复:
C#中的安全导航操作员?
"如果object为null,则为null;如果object为null,则为object.member"的快捷方式

在我的XML处理项目中,我必须浏览链式属性以获得所需的值.例如,obj1.obj2.obj3.obj4.obj....Value.并且可能退出此链中的任何对象为null.

我用Google搜索了"c#中的NullSafe导航"并找到了一些不错的文章.从Post之一,我有了实现自定义扩展的想法.现在我对这个扩展的性能有疑问.我有这3个解决方案.任何人都可以建议我采用哪一种(在性能方面)?

  • 选项1(使用本文中解释的逻辑):

    //custom extension method
    public static TOutput IfNotNull<TInput, TOutput>(this TInput x, Func<TInput, TOutput> f)
        where TInput : class
        where TOutput : class
    {
        return x == null ? null : f(x);
    }
    
    //with custom extension method -- Very neat & clean.. but what about performance? 
    string x = obj1
                .IfNotNull(x => x.obj2)
                .IfNotNull(x => x.obj3)
                .IfNotNull(x => x.obj4)
                .IfNotNull(x => x.obj5)
                .IfNotNull(x => x.Value);
    
    Run Code Online (Sandbox Code Playgroud)
  • 选项2:

    //with NullCheck  -- probably …
    Run Code Online (Sandbox Code Playgroud)

.net c# linq null

7
推荐指数
1
解决办法
864
查看次数

非重复的说法:除非对象为null,否则访问此对象的成员

假设我有一套车,每辆车都有一个方向盘.我想编写一行代码,在集合中查找汽车并返回其方向盘,如果汽车不在集合中,则返回null.像这样的东西:

Car found = // either a Car or null
SteeringWheel wheel = (found == null ? null : found.steeringwheel);
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点不使用found,并null在表达两次吗?我不喜欢这里重复的气味.

c# idiomatic null-coalescing

3
推荐指数
1
解决办法
62
查看次数

标签 统计

c# ×3

.net ×1

generics ×1

idiomatic ×1

linq ×1

null ×1

null-coalescing ×1