2009-06-01 3 views
1

두 테이블, 점심 및 저녁 식사를 가정 해 보겠습니다. 나는 둘 다 DateTime 속성 "Time"을 가지고 있다는 것을 알고있다.표현식의 일반 속성 참조

일반 메서드 GetTime이있는 경우 T가 Lunch 일 때 db.Lunch.Time을 반환하고 T가 Dinner 일 때 db.Dinner.Time을 반환 할 수 있습니까? 나는 T를 개별적으로 typeof를 사용하여 테스트하지 않고이 목표를 달성하기 위해 노력하고 있지만 오히려 일반적으로 사용합니다.

의사 코드 : 내가 GetTime에 < 저녁 식사를 호출 할 때

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

그래서> 자동으로 내 공급 매개 변수 (DT)와 동일한 속성 시간에 모든 저녁 식사 엔티티의 저녁 식사 테이블에서 찾게됩니다.

문제는 내가 구체적으로 엔티티를 사용할 수 없다는 것입니다. T는이므로 제 표현식에 T가 많이 사용됩니다. 내 질문은 그걸 해결하는 방법입니다. 그래서 어떤 T도 ( 시간 속성을 가지고있는 모든 엔티티가 Dinner and Lunch에 대한 특정 메소드를 만들지 않고) 찾을 수 있습니다.

+0

시간이라는 속성이 있습니다 오히려 혼란 스럽다. 코드 샘플 또는 의사 코드가 도움이됩니다. –

+0

일부 의사 코드를 추가하고 좋은 대답을 얻었습니다. – Alex

+0

_generics_는 _ 템플릿 _이 아닙니다. type 매개 변수를 사용하여 수행하는 모든 작업은 type 매개 변수의 제약 조건에만 기반하여 해석 할 수 있어야합니다. –

답변

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; 
     } 
    } 
+0

위대한 설명. 같은 방향으로 첫 번째 대답이 왔지만 어쨌든 고맙습니다. :) – Alex

+0

그래 .... 대답을 마치고 ..... 봤어. 문제 없어. – CSharpAtl