在长嵌套调用中空检查任何属性

Ger*_*art 1 c# func

难以用语言解释,所以我将提供一个例子.

我想在Razor中输出这个(但是它的剃刀是无关紧要的,我的问题是关于c#):

@SomeClass.SomeClass.SomeClass.ID.ToString()
Run Code Online (Sandbox Code Playgroud)

任何SomeClass都可以为null(这是一个外部api,我实际上没有影响)

所以我尝试了这个:

@functions{
    private string Safe(Func<string> val, string defaultValue)
    {        
        try 
        {
            return val.Invoke();
        }
        catch(NullReferenceException ex)
        {
            return defaultValue;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后这个:

@Safe(SomeClass.SomeClass.SomeClass.ID.ToString, "value not found")
Run Code Online (Sandbox Code Playgroud)

但是没有雪茄......有没有办法实现这一目标?谢谢.

UPDATE1:使用NullReferenceException显然要多得多.

Ken*_*eth 5

你应该通过整个电话:

@Safe(() => SomeClass.SomeClass.SomeClass.ID.ToString(), "value not found")
Run Code Online (Sandbox Code Playgroud)

你必须这样做的原因是因为现在异常将在你的方法中发生.否则它会在它到达ToString方法之前抛出NullReferenceException.