2009-06-01 20 views
1

假設我有兩張表,午餐和晚餐。我知道這兩個都包含DateTime屬性「時間」。表達式中的參考通用屬性

如果我有一個通用方法GetTime,當T是Lunch時,我怎麼能返回db.Lunch.Time,當T是Dinner時,我怎麼返回db.Dinner.Time?我試圖達到這一點,而不是單獨使用typeof來測試T,而是一般地測試。

僞代碼:

public T GetTime<T>(DateTime dt) 
{ 
    return MyDataContext.GetTable<T>().Where(entity => entity.Time == dt); 
} 

所以,當我打電話GETTIME <晚餐>它會自動查找在飯桌上與財產的時間等於我提供的參數DT所有晚餐實體。

問題是我不能指定entity.Time在我的表達式中,因爲T是一個泛型。我的問題是如何解決這個問題,以便我可以查找任何T(知道我的所有實體的時間屬性爲),而無需爲晚餐和午餐創建特定的方法。

+0

這個問題就是財產相當混亂。代碼示例或一些僞代碼會有所幫助。 – 2009-06-01 20:25:54

+0

添加了一些僞代碼,同時得到了很好的答案:) – Alex 2009-06-01 20:38:25

回答

5

你得有兩個類實現一個接口,這樣的事情:

public interface IMyInterface 
{ 
    DateTime Time{get;set;} 
} 

,然後在泛型方法:

public void MyMethod<T>(T item) where T: IMyInterface 
{ 
    //here you can access item.Time 
} 
0

當然,您可以隨時使用反射。另外,如果這兩種類型實現了與Lunch屬性的通用接口,則可以使用它。 (我不明白你所說的「表」的意思在這裏。)

1

你可以使用午餐和晚餐實現一個接口有一個叫做時間

public interface IMealTime 
    { 
     DateTime Time { get; set; } 
    } 

    public class Lunch : IMealTime 
    { 
     #region IMealTime Members 

     public DateTime Time { get; set; } 

     #endregion 
    } 

    public class Dinner : IMealTime 
    { 
     #region IMealTime Members 
     public DateTime Time { get; set; } 

     #endregion 
    } 

    public class GenericMeal 
    { 
     public DateTime GetMealTime<T>(T meal) where T: IMealTime 
     { 
      return meal.Time; 
     } 
    }