문제

내 시나리오는 간단해야합니다 ... 내가 변환하고 싶은 유형 에서 ~이다 언제나 '끈'. 내가 변환하고 싶은 것은 ... int, dateTimes, ... 문자열 등 많은 것들이 될 수 있습니다.

이것은 쉬울 것입니다 :

string valueToConvertFrom = "123";

int blah = Convert.ToInt32(valueToConvertFrom);

그러나 ... 나는 (런타임까지) 내가 전환해야 할 값이 'int'(또는 무엇이든)라는 것을 모른다. 나는 이것을 시도했다 :

string valueToConvertFrom = "123";

Type convertToType = typeof(int);

object blah = Convert.ChangeType(valueToConvertFrom, convertToType);

그러나 그것은 다음과 같은 오류를줍니다. "객체는 아이콘을 구현해야합니다."

유형 이름을 기준으로 스위치 명령문을 작성하고 "Convert.toblah"를 호출하고 싶지 않습니다 ... 어떤 제안이 있습니까?

도움이 되었습니까?

해결책

깨끗한 방법은 TypeConverter를 사용하는 것입니다. 호출하여 유형 변환기 인스턴스를 얻을 수 있습니다. typedescriptor.getConverter 그런 다음 유형 변환기의 인스턴스를 사용하여 변환을 수행합니다. 그래서 다음과 같은 것 :

string valueToConvertFrom = "123";

Type convertToType = typeof(int);

TypeConverter tc =  TypeDescriptor.GetConverter(convertToType);             

object blah =tc.ConvertFromString(valueToConvertFrom);

다른 팁

문자열 클래스는 상상할 수있는 것을 구현하면이 코드는 단순히 작동해야합니다. 어떤 버전의 .NET을 목표로하고 있습니까?

object o = Convert.ChangeType( str, convertToType );

게다가, 당신이 언급 한 대부분의 유형은 구문 분석 방법을 구현하므로 최고의 샷은 다음과 같은 것일 수 있습니다.

Type convertToType = ...;
MethodInfo mi = convertToType.GetMethod("Parse", BindingFlags.Static);
object blah;
if(mi != null)
{
    blah = mi.Invoke(null, new object[]{valueToConvertFrom});
}
else
{
    // the type doesn't implement the Parse method, handle it another way :/
}

.NET의 유형 변환 문제에 일반적으로 적용되는 Timothy의 질문은 매우 큰 문제입니다. 알려진 유형의 특정 시나리오에서 변환 전략은 다소 간단하지만 불행히도 하나의 임의 유형에서 다른 유형에서 런타임에서 유형 변환을 달성하기위한 .NET의 구현에는 일반화 된 전략이 없습니다. 그러나 Microsoft는 다음을 포함하여 유형 변환의 일반적인 개념에 대한 몇 가지 좋은 지침을 제공합니다.

시스템에서 동일한 일반적인 문제를 처리해야했으며 솔루션으로 모든 표준 전략을 하나의 방법으로 통합했습니다. 이 문제의 범위는 광범위하고 관련 변환 전략은 다양 하므로이 통합 접근 방식은 완전한 기술 기사에서만 다룰 수 있습니다. 그러나 여기에 내 메소드 문서 사본을 제공하여 유사한 일반화 된 솔루션을 개발하려면 해결해야 할 전반적인 요구 사항을 확고히 할 수 있기를 바랍니다. 내 문서에 대한 링크는 다음과 같습니다.

이것이 당신을 도울 수 있기를 바랍니다.

표시

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top