C#:抛出无效的表达式编译

我正在使用此代码来检查queryable值:

 visitor.Queryable = queryable ?? throw new Exception("error message"); 

我收到了编译错误:

错误CS1525:无效的表达式术语’throw’

我正在使用4.5.2 .net框架。 有任何想法吗?

此function仅在C#7.0之后可用 。 请参阅“ 抛出C#7.0中的新增内容” 。

如果您使用较旧的VS并且想要启用C#7function:请查看如何在Visual Studio 2015中使用c#7? 如果不是在VS 2017。


如果你正在使用以前版本的C#编译器,因为你必须是由于错误,那么你不能使用?? 这样运算符,因为throw不返回右操作数值。 正如C#Docs所说:

如果操作数不为null,则返回左侧操作数; 否则它返回正确的操作数。

模式是这样的:

 var result = someObject ?? valueToAssignIfWasNull; 

要解决它而改为:

 if(queryable == null) { throw new Exception("error message"); } visitor.Queryable = queryable; 

我赞成接受了,但我也提出了一个解决方法:

 private Queryable NullAlternative() { throw new ArgumentNullException("Null Queryable not supported at this time."); } 

然后,在其他地方,你可以说

 visitor.Queryable = queryable ?? NullAlternative(); 

如果你不能升级到VS2017但又不想丢失光滑的条件语法,这很好,并且它还有一个额外的好处,就是将来保持某种空对象模式(例如初始化为空)可查询)。