6

出于某种原因,此语句运行良好:

vms.Where(vm => vm.MessageType == ValidationMessage.EnumValidationMessageType.Warning)

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

using MsgType = ValidationMessage.EnumValidationMessageType;

然后生成的代码行:

vms.Where(vm => vm.MessageType == MsgType.Warning)

给我一个错误:

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

请注意,使用别名的其他任何地方都可以正常工作,只是在这些 linq 委托中它会中断。为什么会这样?

4

1 回答 1

2

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

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

using WPF.Utilities.ObjectModel;
using MsgType = ValidationMessage.EnumValidationMessageType;

当然,C# 无法根据先前的命名空间包含来确定类型来自何处,我必须将其完全拼写出来:

using WPF.Utilities.ObjectModel;
using MsgType = WPF.Utilities.ObjectModel.ValidationMessage.EnumValidationMessageType;

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

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

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

于 2012-06-28T17:38:41.413 回答