我最近发现:
if (Foo() != null)
{ mymethod(); }
可以改写为
Foo?.mymethod()
可以用类似的方式重写以下内容吗?
if (Foo == null)
{ throw new Exception()}
答案 0 :(得分:4)
C#6中没有类似的时尚语法。
但是,如果您愿意,可以使用扩展方法简化空检查...
public static void ThrowIfNull(this object obj)
{
if (obj == null)
throw new Exception();
}
使用
foo.ThrowIfNull();
或者改进它以显示空对象名称。
public static void ThrowIfNull(this object obj, string objName)
{
if (obj == null)
throw new Exception(string.Format("{0} is null.", objName));
}
foo.ThrowIfNull("foo");
答案 1 :(得分:4)
是的,从C#7开始,您可以使用投掷表达式
var firstName = name ?? throw new ArgumentException (nameof(name), "Mandatory parameter");
答案 2 :(得分:2)
我不知道你为什么会......
public Exception GetException(object instance)
{
return (instance == null) ? new ArgumentNullException() : new ArgumentException();
}
public void Main()
{
object something = null;
throw GetException(something);
}
答案 3 :(得分:2)
If null then null; if not then dot
使用null条件的代码可以通过在阅读时向自己说出该语句来轻松理解。因此,例如在您的示例中,如果foo为null,则它将返回null。如果它不是null,那么它会" dot"然后抛出一个我不相信你想要的例外。
如果您正在寻找处理空检查的简写方法,我建议Jon Skeet's answer here及其相关的blog post主题。
Deborah Kurata在this Pluralsight course中引用了这句话,我也建议这样做。