함수를 100 번 오버로드하거나 다른 유형의 Compareer를 100 개 작성하는 대신 하나의 함수 내에서 유형을 확인하기로 결정했습니다.유형을 확인하는 가장 빠른 방법은 무엇입니까?
예를 들어, 기본 비교자를 사용하여 2 개의 객체 내에서 일련의 유형 (프리미티브 및 문자열) 값을 비교합니다. 여기
public class DefComparer : IComparer<object> {
public int Compare(object a, object b) {
.... // a = a.GetType().GetField(field).GetValue(a); - not important for the question but I'm just showing that a&b below are different references
switch (a.GetType().Name) {
case "Byte":
if ((byte)a == (byte)b) return 0;
else if ((byte)a > (byte)b) return 1;
else return -1;
case "UInt16":
if ((ushort)a == (ushort)b) return 0;
else if ((ushort)a > (ushort)b) return 1;
else return -1;
case "SByte":
if ((sbyte)a == (sbyte)b) return 0;
else if ((sbyte)a > (sbyte)b) return 1;
else return -1;
case "Int16":
...
내가 if
/else
문 체인보다 빠른이라고하는 switch
문을 사용하고 있습니다 : 그것은 다음과 같은 코드가 포함되어 있습니다. 그러나 a.GetType().Name
은 동적으로 얻은 문자열을 반환하며이 메서드에는 문자열 비교가 포함됩니다. 그것은 나에게 특히 빠르다고 들리지 않는다. Comparer은 많은 양의 데이터에 사용되기 때문에 기술적으로 가능한 한 빨리 수행해야합니다.
Q : 문자열 비교를 포함하지 않는 개체 유형을 빠르게 검사 할 수있는 방법이 있습니까? 가능한 가장 빠른 방법은 무엇입니까?
당신은'Comparer.Default'를 찾고 있습니다. – SLaks
또는 ((IComparable) a) .CompareTo (b)를 호출하십시오. – usr
아니요. 'Comparer.Default'가 필요하지 않습니다. 내 게시물을 더 명확하게 편집했습니다. 제 질문은 유형을 확인하는 빠른 방법에 관한 것입니다. – brandon