2012-06-01 20 views
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#的一個特性,並且解決方法的擴展方法工作得非常好 - 但是我更願意在可能的情況下將它作爲實例方法,因爲看起來'更好' 對我來說。

回答

3

有沒有辦法在類型參數中指定參數是對象實例的類型?

沒有。抱歉。有些時候我可以看到它很有用,但這不是你可以做的事情。我在過去有類似的問題:(

+1

不知何故,我知道這個問題的第一個答案是喬恩Skeet說「不」。謝謝! – eouw0o83hf