'T'유형의 값은로 변환 할 수 없습니다
이것은 초보자 질문 일 가능성이 있지만 Google은 놀랍게도 답변을 제공하지 않았습니다.
이 인공적인 방법이 있습니다
T HowToCast<T>(T t)
{
if (typeof(T) == typeof(string))
{
T newT1 = "some text";
T newT2 = (string)t;
}
return t;
}
C ++ 배경에서 오는 것이 이것이 효과가 있다고 예상했습니다. 그러나 위의 두 가지 할당 모두에 대해 " 'T'유형을 문자열로 암시 적으로 변환 할 수 없음"및 " 'T'유형을 문자열로 변환 할 수 없음"으로 컴파일되지 않습니다.
개념적으로 잘못된 일을하거나 구문이 잘못되었습니다. 이걸 정리해주세요.
감사합니다!
그것이 내부 비록 if
블록, 컴파일러는 모르는 T
것입니다 string
.
따라서 캐스팅 할 수 없습니다. (당신이 캐스팅 할 수없는 것과 같은 이유 DateTime
에 string
)
당신은에 캐스트 할 필요가 object
(이 어떤, T
위해 할 수있는 캐스트), 거기에에서 string
(이후 object
에 할 수 있습니다 캐스트 string
).
예를 들면 다음과 같습니다.
T newT1 = (T)(object)"some text";
string newT2 = (string)(object)t;
두 줄 모두 같은 문제가 있습니다
T newT1 = "some text";
T newT2 = (string)t;
컴파일러는 T가 문자열임을 알지 못하므로 할당 방법을 알 방법이 없습니다. 그러나 당신이 확인했기 때문에 당신은 그것을 강제로 할 수 있습니다.
T newT1 = "some text" as T;
T newT2 = t;
이미 문자열이기 때문에 t를 캐스트 할 필요가 없으며 제약 조건을 추가해야합니다.
where T : class
명시 적 유형을 확인하는 경우 왜 이러한 변수를로 선언 T
합니까?
T HowToCast<T>(T t)
{
if (typeof(T) == typeof(string))
{
var newT1 = "some text";
var newT2 = t; //this builds but I'm not sure what it does under the hood.
var newT3 = t.ToString(); //for sure the string you want.
}
return t;
}
클래스와 메서드 모두에 대한 일반적인 선언이있는 경우에도이 오류가 발생합니다. 예를 들어 아래 코드는이 컴파일 오류를 나타냅니다.
public class Foo <T> {
T var;
public <T> void doSomething(Class <T> cls) throws InstantiationException, IllegalAccessException {
this.var = cls.newInstance();
}
}
이 코드는 컴파일합니다 (메소드 선언에서 T가 제거됨).
public class Foo <T> {
T var;
public void doSomething(Class <T> cls) throws InstantiationException, IllegalAccessException {
this.var = cls.newInstance();
}
}
이 줄을 바꾸십시오 :
if (typeof(T) == typeof(string))
이 줄의 경우 :
if (t.GetType() == typeof(string))
참고URL : https://stackoverflow.com/questions/4092393/value-of-type-t-cannot-be-converted-to
'development' 카테고리의 다른 글
Java에서 HTML 문자 엔티티를 이스케이프 해제하는 방법은 무엇입니까? (0) | 2020.06.30 |
---|---|
PHP로 RSS / Atom 피드를 파싱하는 가장 좋은 방법 (0) | 2020.06.30 |
시스템에서 부스트 버전을 확인하는 방법은 무엇입니까? (0) | 2020.06.30 |
Pyflakes가 문장을 무시하도록하려면 어떻게해야합니까? (0) | 2020.06.30 |
Xcode에서 특정 소스 파일의 모든 경고를 억제하는 방법은 무엇입니까? (0) | 2020.06.30 |