이 객체는 적분 유형입니다. 5 줄 미만의 코드로 가치를 얻을 수 있습니까?

StackOverflow https://stackoverflow.com/questions/631994

  •  08-07-2019
  •  | 
  •  

문제

데이터 리더가 있습니다. 나는 그것의 값을 값 42와 비교하고 싶습니다. INT, TINYINT, SMALLINT, MEDIUMINT, BIGINT, JUMBODELUXEINT, 등.). C# 코드에 실제 유형을 하드 와이어하고 싶지 않습니다. 내가 생각해 낸 최고는입니다

object x = reader.GetValue(i);
uint k = x is byte ? (byte) x
    : x is short ? (uint) (short) x
    : x is ushort ? (ushort) x
    : x is int ? (int) (int) x
    : (uint) x;
if (k == 42) { ... }

이것은 엄청나게 오래 찢어진 것 같습니다. 나는 사용을 시도했다 Equals 그러나 동일한 값을 가진 다른 적분 유형은 동일하게 테스트하는 것처럼 보이지 않습니다.

더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

그냥 확인 Convert.ToUInt32(object)... 예, 잘 작동합니다.

using System;

class Test
{
    static void Main()
    {
        Check((byte)10);
        Check((short)10);
        Check((ushort)10);
        Check((int)10);
        Check((uint)10);
    }

    static void Check(object o)
    {
        Console.WriteLine("Type {0} converted to UInt32: {1}",
                          o.GetType().Name, Convert.ToUInt32(o));
    }
}

즉, 코드는 다음과 같습니다.

object x = reader.GetValue(i);
uint k = Convert.ToUInt32(x);
if (k == 42) { ... }

또는 그 모든 것을 감안할 때 uint데이터 리더를 사용하는 경우 S는 오랫동안 표현할 수 있습니다. reader.GetInt64(i)? 전환이 당신을 위해 이루어질지 여부를 모르지만 시도해 볼 가치가 있습니다.

다른 팁

if(Convert.ToUInt32(reader.GetValue(i)) == 42) { ... }

또한 Skeet 's와 Daniel의 답변을 다음과 같이 반대로 할 수 있습니다.

if (k == Convert.ChangeType(42, k.GetType()) { ... }

그래도 테스트하지 않았습니다.

내가 당신을 올바르게 이해하는지 확실하지 않지만 이것이 효과가 있다고 생각합니다.

int x = int.Parse(reader.GetValue(i).ToString());
if(x == 42) { // do your logic }

당신은 이것을 시도 할 수 있습니다 :

unit k = Convert.ToUInt32(x);

하지만 변수의 이름을 바꾸는 것이 좋습니다. 1 글자 변수입니다 지난주 sooo.

이것은 작동해야합니다 :

object x = reader.GetValue(i);

uint k;
try
{
    k = Convert.ToUInt32(x);
}
catch(InvalidCastException e) { ... }
if (k == 42) { ... }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top