2011-12-15 4 views
0

는 그래서 같은 일반적인 "getProperty에"있어 : prop.position가 Vector2 같이일반 반환 형식의 메서드에서 기본 형식을 반환하려면 어떻게해야합니까? 내 코드에서

public T getProperty<T>(int GUID, string property) 
{ 
    PropertyComponent prop; 
    prop = propDict[GUID]; 
    if(property.Equals("visible")) return (T) (Boolean) prop.visible; 
    if(property.Equals("enabled")) return prop.enabled; 
    if(property.Equals("position")) return (T) (Object) prop.position; 
} 

비주얼 스튜디오의 컴파일러는, 나에게 3 용어에 대한 오류를 제공하지 않습니다. 그러나 Prop.visible 및 prop.enabled는 bool이므로 이러한 방식으로 반환하려고하면 "bool을 T로 변환 할 수 없습니다"(그리고 "bool을 T로 암시 적으로 변환 할 수 없습니다") 오류가 발생합니다. 두 번째).

이 상황에서 bool을 반환하는 올바른 방법은 무엇입니까?

+2

'(T) (object)'는 3 개의 모든 용어에 대해 올바른 캐스트입니다. – Marc

+0

@Marc 그래서 "당신은 기본 요소를 사용할 수 없습니까?" –

답변

3

제네릭 형식 매개 변수를 클래스 또는 구조체 (where 절을 사용)로 제한 할 수 있지만 예에서는 T 유형을 클래스 및 구조체 (bool 값 형식)로 취급합니다.

참조 형식 개체 인스턴스와 값 형식 데이터 (예 : bool)를 반환하려면 참조 형식 개체가 유일한 공통 분모이므로 값 형식을 개체로 "상자에 넣어야"할 것입니다 참조 유형과 값 유형 사이. 권투는 Object에 값 유형을 유형 변환 할 때 자동으로 발생합니다. 따라서 모든 반환 값은 (T)(object)으로 유형 변환되어야합니다.

+0

+1, 좋은 설명. – Marc

+0

그래서 해결책은 프리미티브로 시도하지 않는 것입니다. 내 모든'bool's를'Boolean'으로 변환하십시오. 알았다. –

+0

@RavenDreamer'bool'은'Boolean'과 같습니다. bool 키워드는'System.Boolean'의 별명입니다. – phoog

관련 문제