“this”类型为派生类的泛型参数

时间:2012-06-01 15:32:25

标签: c# generics

有没有办法在类型参数中指定参数是对象实例的类型?

例如,为了说明,我有:

public abstract class Model
{
    public int Prop1 { get; set; }
}

对于我的例子,我希望有一个方法可以返回传入的Model的属性(显然这是一个愚蠢的方法,但它得到了重点)。我可以将它作为一种扩展方法:

public static class Extensions
{
    public static U Property<T, U>(this T model, Expression<Func<T, U>> property) where T : Model
    {
        return property.Compile().Invoke(model);
    }
}

这样我可以

public class DerivedModel : Model
{
    public string Prop2 { get; set; }
}

并做

var myString = new DerivedModel().Property(a => a.Prop2);

这个方法似乎应该是Model类的一部分,看起来像:

public T Property<T>(Expression<Func<ThisDerivedInstanceOfModel, T>> property)
{
    return property.Compile().Invoke(this);
}

以便扩展方法执行的Property()调用可以在Model的实例上执行。

我意识到这有点奇怪,可能根本就不是C#的一个特性,而且变通方法的扩展方法运行得非常好 - 但我更倾向于在可能的情况下使这个实例方法,因为似乎'更好'对我来说。

1 个答案:

答案 0 :(得分:4)

  

有没有办法在类型参数中指定参数是对象实例的类型?

不。抱歉。有时我可以看到它有用,但这不是你能做的事情。我过去也遇到过类似的问题:(