У меня есть классы
public class FooKeyedCollection : KeyedCollection<FooType,Foo>
{
}
public enum FooType
{
FooType1,
FooType2,
FooType3
}
public Foo
{
public FooType Type { get; set; }
public string Value { get; set; }
}
Когда я добавляю элементы в свою коллекцию FooKeyedCollection, я могу индексировать их по FooType, но когда я пытаюсь проиндексировать их как int, int интерпретируется как перечисление FooType. В результате это приводит к сбивающей с толку ошибке, т. Е.
public static void main()
{
FooKeyedCollection fkc = new FooKeyedCollection();
Foo myFoo = new Foo();
myFoo.Type = FooType.FooType3;
myFoo.Value = "someValue";
foo.Add( myFoo );
Foo myFooByType = foo[FooType.FooType3];
Foo myFooByIndex = foo[0]; // <-- exception thrown here
}
Результат выполнения этого кода является исключением при попытке извлечь элемент по целочисленному индексу. Я надеюсь представить FooKeyedCollection как часть общедоступного API, и я хочу защитить потребителей этого API от этой ошибки. Есть ли способ, которым я могу изменить класс FooKeyedCollection, чтобы получить правильное поведение?