2014-02-13 2 views
1

변수가 데이터 형식 Object으로 반환됩니다. 때로는 datetime을 반환하고 때로는 bool 등을 반환합니다.개체가 자동으로 데이터 형식을 검색하고 필요한 데이터 형식으로 변환합니다.

그러나 모든 정보를 나열하고 올바른 데이터 유형으로 변환하려면 if ... else 문을 사용하고 싶지 않습니다.

아무 방법이나 convert.tostring(xxx), convert.toboolean(xxx)?

+4

난 당신이 그런 일을 사용하는 방법을 상상할 수 없다 도움이 될 약간의 예입니다. 그것을 보여주는 예제 코드를 추가 할 수 있습니까? – svick

+1

하지만 변환 결과는 어떻게 사용합니까? 컴파일 시간 지원을 원한다면, 그것을 다른 변수 유형에 할당해야합니다 ... 그런 변환의 목적은 무엇입니까? –

+0

변환 후에 값을 변수에 저장하면이 변수의 유형은 무엇입니까? – bdn02

답변

2

Convert 클래스의 Convert.ChangeType 메서드를 조사하고 싶을 수 있습니다.

여기

namespace UnitTest 
{ 
    using System; 

    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Console.WriteLine(ConvertToType(DateTime.Now).GetType().Name); 
      Console.WriteLine(ConvertToType<Guid>(Guid.NewGuid()).GetType().Name); 
      Console.Read(); 
     } 

     public static dynamic ConvertToType(object obj) 
     { 
      //If you're unsure of the type you want to return. 
      return Convert.ChangeType(obj, obj.GetType()); 
     } 

     public static T ConvertToType<T>(object obj) 
     { 
      //If you definitely know the type you want to return. 
      return (T)Convert.ChangeType(obj, typeof(T)); 
     } 
    } 
} 
0

동적 개체 개념을 사용하여이 작업을 수행 할 수 있습니다.

dynamic object concept

+0

나는 OP가 C# 타이핑 개념을 확신하지 못하기 때문에 동적 인 객체를 도입하면이 지식을 더 많이 손상시킬 것입니다. –

+0

나는 그렇게 생각하지 않습니다. 왜냐하면 내가 할당하려고하는 변수는 고정 된 데이터 유형이기 때문에 할당 할 값은 object입니다. 난 정말 그것을 할당 할 수 전에 올바른 데이터 형식으로 변환해야합니다. 귀하의 회신에 감사드립니다. –

0

하지만 난 당신이 단순히 그것을 할 수 있다고 생각, 당신이 방법을 쓸 반사를 사용할 수 있습니다

var test = variable.ConvertIt(); 

이 ConvertIt, 반사와 런타임 및 반환에 변수를 캐스팅 할 수 있습니다 역동적 인 사람. 하지만 이제 어떻게 테스트 변수를 사용합니까?

죄송합니다. 나쁜 영어는 죄송합니다.

+0

. 하지만 난 여전히 그것을 얻을 수 없다면 어떻게 코딩은 개체가 그것에 여분의 기능을 가지고 보이는 것입니다. 보여 주실 수 있어요? –

+0

your_type.GetMethods (BindingFlags .... ecc)로 Object 유형의 모든 메소드를 열거 할 수 있습니다. – alfdev

0

이 모양은 특이한 것처럼 보일 수 있지만 문제는 (처음에는 if-else을 사용하고 싶지 않음) 특유한 것입니다. 이것은 다른 방법으로는 가능하지 않습니다. 모든 유형의 데이터를 처리하기 위해 변수를 사용할 수 없기 때문에 데이터 유형이 작성되었습니다. 그것은 프로그래머뿐만 아니라 컴파일러에게도 문제입니다.

try 
{ 
    int a = convert.toint32(x); 
    // Process a; 
} 
catch(Exception e) 
{ 
    try 
    { 
     string b = convert.tostring(x); 
     //Process b; 
    } 
    catch(Exception ex) 
    { 
     // and so on... 
    } 
} 

또한 원하는대로 Convert.To__을 사용합니다.

관련 문제