我正在使用此代码来检查queryable
值:
visitor.Queryable = queryable ?? throw new Exception("error message");
我收到了编译错误:
错误CS1525:无效的表达式术语'throw'
我正在使用4.5.2 .net框架。 有什么想法吗?
答案 0 :(得分:20)
此功能仅在C#7.0后可用。见Throw exception of What's New in C# 7.0下。
如果您使用较旧的VS并希望启用C#7功能:如果不在VS 2017中,请查看How to use c#7 with Visual Studio 2015?。
如果您正在使用以前版本的C#编译器,因为您必须是由于错误,那么您不能以这种方式使用??
运算符,因为throw不会返回正确的操作数值。正如C# Docs所说:
如果操作数不为空,则返回左侧操作数;否则它返回正确的操作数。
模式是这样的:
var result = someObject ?? valueToAssignIfWasNull;
要解决它而改为:
if(queryable == null)
{
throw new Exception("error message");
}
visitor.Queryable = queryable;
答案 1 :(得分:0)
我赞成接受了,但我也提出了一个解决方法:
private Queryable NullAlternative()
{
throw new ArgumentNullException("Null Queryable not supported at this time.");
}
然后,在其他地方,你可以说
visitor.Queryable = queryable ?? NullAlternative();
如果您无法升级到VS2017但又不想丢失灵活的条件语法,这很好,并且它还有一个额外的好处,就是让它对某种空对象模式保持开放状态。 future(例如初始化一个空的可查询对象)。