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但又不想丢失光滑的条件语法,这很好,并且它还有一个额外的好处,就是将来保持某种空对象模式(例如初始化为空)可查询)。