c# – 具有派生类型的泛型类型推断

class属性是抽象的

我有以下方法:

private IPortionOfPropertyInfoAddEditView<T> getPropertyEditPortion<T>(T property) where T : Property { /*details unimportant*/ }

Property P = PropertyFactoryMethod.GetSomePropertyInstance();

var PropertyInfoPortion = getPropertyEditPortion(P);

当我以这种方式调用方法时,推断的类型是Property,而不是派生得更好的Well或RealEstate,可能是因为类型推断是在编译时完成的.我通过将P转换为动态来解决这个问题,例如:

var PropertyInfoPortion = getPropertyEditPortion((dynamic)P);

哪个工作正常.我只是想知道是否有更优雅的方式来做到这一点.

编辑

对不起,我总是尝试显示最少量的代码以获得重点,以免事情变得太杂乱.这是完整的方法:

private IPortionOfPropertyInfoAddEditView<T> getPropertyEditPortion<T>(T property) where T : Property {
        return StructureMap.ObjectFactory.GetInstance<IPortionOfPropertyInfoAddEditView<T>>();         
    }

我有一个Property实例(它是抽象的),我使用类型推断来获取真实类型传递给我的IoC,而不必求助于反射(将正确的泛型类型放在一起).我只是想知道是否有一个技巧可以在没有动态投射的情况下完成,但我猜不是.谢谢大家.

编辑2

我正在尝试创建一个IPortionOfPropertyInfoAddEditView< T>

My Property实例P属于IPortionOfPropertyInfoAddEditView需要的类型,但它的类型为Property,而不是更多的派生类型.如果我能说,我会喜欢它:

StructureMap.ObjectFactory.GetInstance<IPortionOfPropertyInfoAddEditView<typeof(P)>>()

但这显然是不允许的.我认为使用动态演员的类型推断将是下一个最好的事情,我只是想知道是否有人有更好的方法.很抱歉从一开始就不清楚!

使用泛型无法做到这一点,因为泛型总是对静态类型的值进行操作.你通过使用运行时机制(动态)解决这个问题的事实是一个很好的暗示.

有许多好的运行时解决方案,但它取决于您想要对属性做什么(即,您要访问哪些成员,所述成员的可见性等).

相关文章
相关标签/搜索