2013-07-10 122 views
2

我想這樣做正確的語法:泛型擴展方法

public static void SetStringsToBeNonUnicode(this EntityTypeConfiguration<T> config) 
{ 

} 

編譯器不喜歡<牛逼>在那裏,究竟是什麼正確的語法?


更多的上下文,EntityTypeConfiguration是的EntityFramework類,定義爲

public class EntityTypeConfiguration<TEntityType> : StructuralTypeConfiguration<TEntityType> where TEntityType : class 

這是什麼原因造成我的頭痛。

我真正想的是能夠配置的DbContext類的時候做這樣的事情來結束:

public class ReceiptEntityConfiguration: EntityTypeConfiguration<ReceiptEntity> 
{ 
    public ReceiptEntityConfiguration() 
    { 
     ToTable("vReceipt"); 
     HasKey(r => r.ReceiptId); 
     this.SetStringsToBeNonUnicode(); //I want to make all string fields for this entity type (ReceiptEntity in this case) to be treated as not unicode. 
     ...etc etc 
    } 
} 

EF6.0處理這與輕型約定,但我不能使用測試版位爲刺激。

+0

見http://msdn.microsoft.com/en-us/library/twcad0zb.aspx –

+0

蒂姆幾乎沒有,這提供了答案:http://stackoverflow.com/questions/68750/how-do-write-ac-sharp-extension-method-for-general-typed-class – BlackICE

回答

5

你需要指定T作爲函數的類型參數。你是這樣做的:

public static void SetStringsToBeNonUnicode<T>(this EntityTypeConfiguration<T> config) where T : class 
{ 

} 
+1

我不認爲'T'可以是包含類的類型參數,can它?從概念上講,應該可以在泛型或非靜態類中定義擴展方法,並且它的範圍僅限於該類,但我不認爲C#將允許在此類中使用「擴展」屬性的任何方法聲明類。 – supercat

+0

@supercat:你當然是對的;擴展方法只能在* static *,* non-nested *,*非泛型*類中聲明。 (就我個人而言,我覺得這樣的事情甚至被稱爲「類」,稍微令人煩惱,它是什麼*類的類*它更像是一個Visual Basic模塊,但我們現在堅持下去) –

+0

好點。我的括號在實際上並不適用於它的擴展方法,因此與問題無關。我已將其刪除。 – Tim