Я хотел бы создать универсальный класс, который я могу использовать для реализации Parameterized Properties в C #.Основной код, который я хочу, это:
public class ParameterizedProperty<typeReturn, typeIndexer> {
private typeReturn oReturn = default(typeReturn);
public typeReturn this[typeIndexer oIndexer] {
get { return oReturn[oIndexer]; }
set { oReturn[oIndexer] = value; }
}
}
Но так как typeReturn
неизвестен / не ограничен, компилятор строит на линиях oReturn[oIndexer]
.
Так как мне получить этоРабота?Моя первая (ну, во-вторых) мысль - использовать Reflection для условного поиска индексатора (и вызвать ошибку, если он не найден) или, возможно, использовать модификатор where typeReturn: I???
в определении класса.Но если я воспользуюсь модификатором, что бы I???
было бы?
Спасибо за любые решения этой проблемы!
ПРИМЕЧАНИЕ. Как правильно найти индексатор с помощью Reflection, можно найти здесь (предположительно): http://www.dotnet247.com/247reference/msgs/3/16665.aspx (см. Последнее сообщение).
РЕДАКТИРОВАТЬ: Как указывал Мэтью ниже ... У меня есть что-то вроде опечатки / ошибки в исходном описании... Моя собственная вина, правда ... изначально писал это перед сном!Код, который я хочу, выглядел бы примерно так:
public class ParameterizedProperty<typeReturn, typeIndexer> {
private typeReturn[] oReturn;
public ParameterizedProperty(typeReturn[] oSource) {
oReturn = oSource;
}
public typeReturn this[typeIndexer oIndexer] {
get { return oReturn[oIndexer]; }
set { oReturn[oIndexer] = value; }
}
}
... и что вы поспорите, что работает!?
Э-э, не совсем!Все еще жалуюсь на typeIndexer
(желая использовать тип int), но гораздо лучше!Я также добавил в конструктор, чтобы решить эту досадную проблему «я не могу на самом деле установить oReturn to any» =)
Но даже это выглядит не совсем правильно (массивы всегда индексируются с помощью INT, верно? Еслитак что нет необходимости в typeIndexer) ... мне придется снова взглянуть на него в wurk завтра =)