有没有办法在类型参数中指定参数是对象实例的类型?
例如,为了说明,我有:
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#的一个特性,而且变通方法的扩展方法运行得非常好 - 但我更倾向于在可能的情况下使这个实例方法,因为似乎'更好'对我来说。
答案 0 :(得分:4)
有没有办法在类型参数中指定参数是对象实例的类型?
不。抱歉。有时我可以看到它有用,但这不是你能做的事情。我过去也遇到过类似的问题:(