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委托中它才会中断.为什么会这样?
在尝试运行我的程序时,所有这些错误都消失了,并且出现了一个错误,抱怨我的类型别名声明。
问题是该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 的提示 - 我应该知道比信任设计时编译器更好。
| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |