3

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

例如,为了说明,我有:

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# 的一个特性,而且变通方法扩展方法工作得很好——但如果可能的话,我更愿意把它作为一个实例方法,因为对我来说似乎“更好”。

4

1 回答 1

4

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

没有。对不起。有时我可以看到它很有用,但这不是您可以做的。我过去也遇到过类似的问题:(

于 2012-06-01T15:36:06.630 回答