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

时间:2017-11-07 11:02:20

标签: c#

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

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

我收到了编译错误:

  

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

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

2 个答案:

答案 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(例如初始化一个空的可查询对象)。