我在使用属性索引器(C#)时发现了一种奇怪的行为。
请考虑下面的程序:
public class Program
{
public static void Main(string[] args)
{
CustomMessageList cml = new CustomMessageList
{
new CustomMessage(), // Type1
new CustomMessage(), // Type1
new CustomMessage(), // Type1
new CustomMessage(), // Type1
new CustomMessage(), // Type1
new CustomMessage() // Type1
};
// Empty
IEnumerable<CustomMessage> x1 = cml[MessageType.Type2];
// Contains all elements (6)
IEnumerable<CustomMessage> x2 = cml[0]; // MessageType.Type1 ????
// Does not compile!
IEnumerable<CustomMessage> x3 = cml[1]; // NOT MessageType.Type2 ????
}
}
public class CustomMessageList : List<CustomMessage>
{
public IEnumerable<CustomMessage> this[MessageType type]
{
get { return this.Where(msg => msg.MessageType == type); }
}
}
public class CustomMessage
{
public MessageType MessageType { get; set; }
}
public enum MessageType
{
Type1,
Type2,
Type3
}
当使用默认索引器(x2变量)时,为什么我会得到所有结果?
似乎 int
参数(0)自动转换为枚举类型(Type1)。这不是我预期的...
感谢您提前解释!
0
仍然可以转换为该枚举类型。 - ServyMessageType.Type1
等于1
,但传入1
不会编译,而是编译并搜索该枚举的所有实例。您没有解释这种差异,而根据代码示例,这显然是混淆的重点。他尝试过,并清楚地知道MessageType.Type2
映射到1
,这表明您在此处展示的所有内容都是他已经弄清楚的信息。您省略的是缺失的信息片段,而其他答案则有这一点。 - Servy