Почему мы знаем, что это ложь? Линия
Database testDatabase = sampleDatabaseList[0];
вызывает индексатор с параметром 0
, который является литералом int
, и поэтому, увидев, что DatabaseList
наследует от HierarchialItemList<Database>
, вызовет индексатор, определенный
public ItemType this[Int32 itemCode] { get; }
, который объявлен как возвращающий ItemType
. Вы не сказали нам, что такое ItemType
. У нас нет оснований знать, что ItemType
можно присвоить переменной типа Database
.
Индексаторы не должны возвращать один и тот же тип. Однако невозможно перегрузить только на основе типа возвращаемого значения. То есть это законно
class IndexerTest {
public int this[int index] {
get {
return 0;
}
}
public string this[double index] {
get {
return "Hello, success!";
}
}
}
Это не
class IndexerTest {
public int this[int index] {
get {
return 0;
}
}
public string this[int index] {
get {
return "Hello, fail!";
}
}
}
Ответ на ваше изменение:
Edit: Я только что понял, что это из-за использования перечисления в качестве индексатора, который внутренне является целым числом. Тем не менее, есть ли способ использовать как перечисление, так и целое число?
Если вы хотите вызвать индексатор, который принимает перечисление, вызовите его так:
sampleDatabaseList[Environments.RMSEnvironment.SomeEnumValue];