在linq语句中使用类型别名会生成错误

Ala*_*ain 6 c# linq visual-studio-2010

由于某种原因,这个声明工作得很好:

vms.Where(vm => vm.MessageType == ValidationMessage.EnumValidationMessageType.Warning)
Run Code Online (Sandbox Code Playgroud)

但是如果在类的顶部,我定义了一个别名(以节省空间):

using MsgType = ValidationMessage.EnumValidationMessageType;
Run Code Online (Sandbox Code Playgroud)

然后得到的代码行:

vms.Where(vm => vm.MessageType == MsgType.Warning)
Run Code Online (Sandbox Code Playgroud)

给我一个错误:

在此输入图像描述 "代表' System.Func<ValidationMessage, int, bool>'不接受1个论点".奇怪的是,这不是我正在使用的代表.我正在使用' System.Func<ValidationMessage, bool>'重载.Where<>()- 与我不使用别名时相同.

请注意,别名正在使用的其他地方工作正常,只有在这些linq委托中它才会中断.为什么会这样?

Ala*_*ain 2

在尝试运行我的程序时,所有这些错误都消失了,并且出现了一个错误,抱怨我的类型别名声明。

问题是该ValidationMessage.EnumValidationMessageType类型存在于命名空间中,该命名空间已进一步声明:

using WPF.Utilities.ObjectModel;
using MsgType = ValidationMessage.EnumValidationMessageType;
Run Code Online (Sandbox Code Playgroud)

当然,C# 无法根据先前的命名空间包含来找出类型的来源,我必须完整地拼写出来:

using WPF.Utilities.ObjectModel;
using MsgType = WPF.Utilities.ObjectModel.ValidationMessage.EnumValidationMessageType;
Run Code Online (Sandbox Code Playgroud)

一旦我这样做了,另一个问题就消失了。

我想我只是对 linq 语句中出现的奇怪错误感到困惑,再加上我在上面的三元运算符中使用别名时 VS 没有显示任何错误,所以我没有看到那里明显的错误。

感谢 nemesv 的提示 - 我应该知道比信任设计时编译器更好。