C# - ;预期在 Throw New Exception 错误中使用 Assert
C# - ; expected in Throw New Excepction error using Assert
我在 C# 项目中使用此代码
public async Task should_not_raise_exception(Mock<IWebSocketClient> webSocket, SlackConnection slackConnection)
{
// given
var connectionInfo = new ConnectionInformation
{
WebSocket = webSocket.Object
};
await slackConnection.Initialise(connectionInfo);
var inboundMessage = new ChatMessage
{
MessageType = MessageType.Message,
User = "lalala"
};
slackConnection.OnMessageReceived += message => throw new Exception("EMPORER OF THE WORLD");
// when & then
Assert.DoesNotThrow(() => webSocket.Raise(x => x.OnMessage += null, null, inboundMessage));
}
但是当我编译它时,这显示了一个关于 ; 的错误。预期,关于错误的代码部分是这样的:
slackConnection.OnMessageReceived += message => throw new Exception("EMPORER OF THE WORLD");
// when & then
Assert.DoesNotThrow(() => webSocket.Raise(x => x.OnMessage += null, null, inboundMessage));
我正在使用框架 4.6.1
查看附件图片
您只需使用这行代码即可重现该问题:
Action<string> foo = message => throw new Exception();
问题是在 C# 7.0 之前,您不能将 throw
用作表达式本身...而这正是表达式主体 lambda 表达式必须具备的。
该行代码在 C# 7 中有效,但在 C# 6 或更早版本中无效。您使用的是哪个版本的框架并不重要,重要的是您使用的是哪个 C# 编译器。
您可以改用语句 lambda(基本上是使用大括号的 lambda 表达式)来修复您的代码:
slackConnection.OnMessageReceived +=
message => { throw new Exception("EMPORER OF THE WORLD"); };
...或者您可以升级到使用 C# 7 :)(例如,通过更新到 VS 2017。)
我在 C# 项目中使用此代码
public async Task should_not_raise_exception(Mock<IWebSocketClient> webSocket, SlackConnection slackConnection)
{
// given
var connectionInfo = new ConnectionInformation
{
WebSocket = webSocket.Object
};
await slackConnection.Initialise(connectionInfo);
var inboundMessage = new ChatMessage
{
MessageType = MessageType.Message,
User = "lalala"
};
slackConnection.OnMessageReceived += message => throw new Exception("EMPORER OF THE WORLD");
// when & then
Assert.DoesNotThrow(() => webSocket.Raise(x => x.OnMessage += null, null, inboundMessage));
}
但是当我编译它时,这显示了一个关于 ; 的错误。预期,关于错误的代码部分是这样的:
slackConnection.OnMessageReceived += message => throw new Exception("EMPORER OF THE WORLD");
// when & then
Assert.DoesNotThrow(() => webSocket.Raise(x => x.OnMessage += null, null, inboundMessage));
我正在使用框架 4.6.1
查看附件图片
您只需使用这行代码即可重现该问题:
Action<string> foo = message => throw new Exception();
问题是在 C# 7.0 之前,您不能将 throw
用作表达式本身...而这正是表达式主体 lambda 表达式必须具备的。
该行代码在 C# 7 中有效,但在 C# 6 或更早版本中无效。您使用的是哪个版本的框架并不重要,重要的是您使用的是哪个 C# 编译器。
您可以改用语句 lambda(基本上是使用大括号的 lambda 表达式)来修复您的代码:
slackConnection.OnMessageReceived +=
message => { throw new Exception("EMPORER OF THE WORLD"); };
...或者您可以升级到使用 C# 7 :)(例如,通过更新到 VS 2017。)