класс Property
это abstract
У меня есть следующий метод:
private IPortionOfPropertyInfoAddEditView<T> getPropertyEditPortion<T>(T property) where T : Property { /*details unimportant*/ }
Property P = PropertyFactoryMethod.GetSomePropertyInstance();
var PropertyInfoPortion = getPropertyEditPortion(P);
Когда я вызываю метод таким образом, выводится тип Property, а не более производный Well
или RealEstate
, предположительно потому, что вывод типа выполняется во время компиляции. Я работал над этим, приведя P к dynamic
, например:
var PropertyInfoPortion = getPropertyEditPortion((dynamic)P);
который отлично работает. Мне просто интересно, есть ли более элегантный способ сделать это.
ИЗМЕНИТЬ
Извините, я всегда стараюсь показывать наименьшее количество кода, чтобы донести суть, чтобы не было слишком беспорядка. Вот полный метод:
private IPortionOfPropertyInfoAddEditView<T> getPropertyEditPortion<T>(T property) where T : Property {
return StructureMap.ObjectFactory.GetInstance<IPortionOfPropertyInfoAddEditView<T>>();
}
У меня есть экземпляр Property (который является абстрактным), и я использовал вывод типа, чтобы получить истинный тип для передачи моему IoC, не прибегая к отражению (чтобы собрать правильный общий тип). Мне просто интересно, есть ли трюк, с помощью которого это можно сделать без приведения dynamic
, но я думаю, что нет. Спасибо всем.
ИЗМЕНИТЬ 2
Я пытаюсь создать IPortionOfPropertyInfoAddEditView<T>
Экземпляр My Property, P, относится к типу, который нужен IPortionOfPropertyInfoAddEditView, но он типизирован как Property, а не как производный тип. Я был бы просто счастлив, если бы мог сказать:
StructureMap.ObjectFactory.GetInstance<IPortionOfPropertyInfoAddEditView<typeof(P)>>()
Но это явно не разрешено. Я подумал, что вывод типа с динамическим приведением будет следующей лучшей вещью, мне просто было интересно, есть ли у кого-нибудь лучший способ. Извините, что не ясно с самого начала!
object
?dynamic
? Ковариантное преобразование вIPortionOfPropertyInfoAddEditView<LessSpecificType>
? НестандартныйIPortionOfPropertyInfoAddEditView
? В вашем комментарии действительно сложно найти смысл, результат метода основан на аргументе типа - он должен быть наиболее производным типом. - person Ani   schedule 18.03.2011