AK_*_*AK_ 7 .net c# syntax web
我想做这个
var path = HttpContext.Current.Request.ApplicationPath;
Run Code Online (Sandbox Code Playgroud)
如果沿途的任何属性为null,我希望路径为null,或者""会更好.
没有三元有没有一种优雅的方式来做到这一点?
理想情况下,我希望这种行为(没有可怕的性能和丑陋)字符串路径;
try
{
path = HttpContext.Current.Request.ApplicationPath;
}
catch
{
path = null;
}
Run Code Online (Sandbox Code Playgroud)
谢谢
Pat*_*iek 11
C#6刚刚发布了它,它附带了null传播的运算符?.,这将简化你的情况:
var path = HttpContext?.Current?.Request?.ApplicationPath
Run Code Online (Sandbox Code Playgroud)
由于历史原因,可以在下面找到以前语言版本的答案.
我想你正在寻找Groovy的安全解除引用运算符?.,而你不是第一个.
从链接的主题,我个人最喜欢的解决方案就是这个(那个看起来也很不错).然后你可以这样做:
var path = HttpContext.IfNotNull(x => x.Current).IfNotNull(x => x.Request).IfNotNull(x => x.ApplicationPath);
Run Code Online (Sandbox Code Playgroud)
您可以随时缩短功能名称.如果表达式中的任何对象为null,则返回null,否则返回ApplicationPath.对于值类型,您必须在结尾执行一次空检查.无论如何,到目前为止没有别的方法,除非你想在每个级别检查null.
这是上面使用的扩展方法:
public static class Extensions
{
// safe null-check.
public static TOut IfNotNull<TIn, TOut>(this TIn v, Func<TIn, TOut> f)
where TIn : class
where TOut: class
{
if (v == null) return null;
return f(v);
}
}
Run Code Online (Sandbox Code Playgroud)