2012-07-26 2 views
2

가능한 중복 두 번째 변수를 캐스트 :
C# generic list <T> how to get the type of T?형태를 취득하고 해당 유형에

내가 목록 변수를 가지고 있고 그 목록의 유형을 싶어하고 두 번째 변수를 캐스팅 그 유형에. 명확성을 위해 아래 코드를 추가했습니다.

return _ValueList.Any<FieldType>(x => x.Equals((FieldType)fieldValueObject)); 

내가 이런 식으로 뭔가를 할 :

Type valueType = _ValueList.GetType(); 

return _ValueList.Any<FieldType>(x => x.Equals((valueType)fieldValueObject)); 

어떤 도움을 이해할 수있을 것이다

현재 나는 다음 있습니다.

업데이트 : fieldValueObject 유형 INT16이며 내가 INT32에 캐스팅 할 때

유효하지 않은 캐스트 예외가 발생합니다.

업데이트 2 : 그것은 꽤 아니지만 작동

 if (fieldValueObject.GetType() == typeof(Int16)) 
     { 
      fieldValueObject = Convert.ToInt32(fieldValueObject); 
     } 
     return _ValueList.Any<FieldType>(x => x.Equals(fieldValueObject)); 

:

나는 다음과 같은 솔루션을 사용했다. 두 번째는 InvalidCastException이 던질 수있는

+0

달성하려는 목표는 무엇입니까? 문자열 값이있는 숫자 목록을 필터링하려고합니까? 나머지 기능을 보면 도움이 될 것입니다. – Alex

+0

값이 일반 목록에 있는지 확인하려고합니다. 내가 테스트하고있는 값은 db에서 검색되며, 목록 유형으로 변환하면 예외가 발생합니다. – FreddieGericke

답변

0
public bool ContainsAny<T>(List<T> valueList, T fieldValueObject) 
{ 
    return valueList.Any(x => x.Equals(fieldValueObject)); 
} 

또는

public bool ContainsAny<T>(List<T> valueList, object fieldValueObject) 
{ 
    return valueList.Any(x => x.Equals((T)fieldValueObject)); 
} 

참고.

+0

fieldValueObject가 Int16 유형이고 Int32로 캐스팅하려고 할 때를 제외하고는이 두 가지 방법 모두 잘 작동합니다. – FreddieGericke

+0

@FreddieGericke 절대적으로 캐스트를해야하는 경우 형식 변환기를 사용하는 것이 좋습니다. '(T) TypeDescriptor.GetConverter (typeof (T)). ConvertFrom (fieldValueObject);' –

관련 문제