gpt4 book ai didi

c# - 为什么 Roslyn 在尝试重写此 lambda 时会崩溃? (Visual Studio 2015 更新 1)

转载 作者:太空狗 更新时间:2023-10-29 17:49:15 25 4
gpt4 key购买 nike

我刚刚升级到 VS2015.1,在尝试编译我的一个项目时遇到了编译器崩溃。如果将以下 repo 代码放入控制台应用程序(并添加对 moq.dll 的引用),第 12 行中的代码会使我的编译器崩溃。它似乎发生在 Roslyn lamdba 重写调用期间。

using System.Collections.Generic;
using System.Linq;
using Moq;

namespace RoslynError
{
class Program
{
static void Main(string[] args)
{
var mockRepo = new MockRepository(MockBehavior.Strict);
var obj = mockRepo.OneOf<DTO>(x => x.Value == (OptionEnum?)null);
}
}

class DTO
{
public DTO(OptionEnum? enumVal)
{
Value = enumVal;
}

public OptionEnum? Value;
}

enum OptionEnum
{
NotSpecified
}
}

有人知道为什么会发生崩溃吗?

最佳答案

以下更简单的示例也重现了与重写表达式树中的类型转换节点相关的问题:

using System;
using System.Linq.Expressions;

namespace Bug461
{
class Program
{
enum Test { }

static void Main()
{
Expression<Func<Test?, bool>> x = t => t == (Test?)null;
}
}
}

编辑:我稍微编辑了代码以避免警告。

编辑 2:错误是由 https://github.com/dotnet/roslyn/commit/5c602fc6 引起的其中降级的枚举操作数(即 null 文字)没有关联类型。

编辑 3:我提出了一个带有建议修复的拉取请求:https://github.com/dotnet/roslyn/pull/7227

关于c# - 为什么 Roslyn 在尝试重写此 lambda 时会崩溃? (Visual Studio 2015 更新 1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34085367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com