我在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
检查附加图像
答案 0 :(得分: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。)