2009-07-03 2 views
2

C# 컴파일러가 개체에 대해 누락 된 연산자 오버로드를 무시하고 대신 런타임에 해당 검사를 처리 할 수 ​​있습니까? int, string, ushort 등의 다양한 속성을 가진 여러 객체가있는 컨테이너가 있기 때문에 물어 봅니다. 해당 컨테이너에 대한 검색 기능을 만들고 있으며 다양한 필드를 검색 할 수 있기를 원합니다.오브젝트를 연산자 X에 과부하가 걸리도록 "가정"하는 방법은 무엇입니까?

저는 술어와 람다 식을 사용하고 있습니다. 이것은 (하지만, 그것은 작동) 오늘을해야 할 것입니다

ID 및 날짜를 ​​가정

var data = container.Retrieve(ID => (ID == 5), Date => (Date > somedate)); 

이 컨테이너의 객체에서 필드입니다 :

내가 원하는 것입니다

var data = container.Retrieve(ID => ((int)ID == 5), Date => ((DateTime)Date > somedate)); 

그 여분의 주조는 첫 번째 예제와 비교할 때별로 좋지 않습니다. 나는 그럴 필요가 없습니다. 대신 런타임에이를 확인하는 옵션이 필요합니다.

이 작업을 수행 할 수있는 방법이 있습니까?

답변

3

아니요, C# 3.0은 형식을 알지 못하는 운영자를 지원하지 않습니다.

C# 4.0에서는 dynamic으로 처리 할 수 ​​있지만 처리 속도가 느립니다.

귀하의 경우, 이 무엇인지 알아야합니다. - 그래서 그냥 던지십시오 (당신처럼). 더 일반적인 경우


: 알 수없는 유형의

, Comparer.Default.Compareobject.Equals 보면 ... 제네릭

; Comparer<T>.Default.Compare(x,y)에서 확인하십시오. >, >=, <<= (널 등 포함)에 필요한 모든 작업을 수행해야합니다. 마찬가지로 EqualityComparer<T>.Default.Equals(x,y)==!= (null 등 포함)을 처리합니다. 많은 사업자

(+, -, * 등) - 나는 내 캐스트와 함께 사는 것, MiscUtil

+0

좋아 봐. 빠른 답변을드립니다. :) – Hallgeir

+0

@Hallgeir : 자신 만의 객체를 사용하거나 객체에서 파생 될 수있는 경우 암시 적 캐스트 연산자 오버로드를 사용할 수 있습니다. 이것이 귀하의 상황에 적용될 수 있는지 확실하지 않습니다. – Abel

관련 문제