繁体   English   中英

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

[英]Using a type alias in a linq statement is generating an error

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

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个参数”。 奇怪的是,这不是我正在使用的代表。 我正在使用.Where<>()的' System.Func<ValidationMessage, bool> '重载 - 与我不使用别名时相同。

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

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

问题是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 - 我应该知道比信任设计时编译器更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM