2013-09-30 9 views
3

IValueConverter를 구현하는 Convert 메서드가 있습니다. 내 첫 문장은 입니다. var returnText = value 문자열로 값을 인계하려고하지 않습니다. 그러나 작동하지 않으며 디버깅 할 때 "return"변수가 returnText에 할당되지 않아 returnText가 항상 null이되도록 값을 찾았습니다. 이상합니다. 왜 아무도 알지 못해?왜 var returnText = value은 문자열이 작동하지 않습니까?

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var returnText = value as string; 

     if (!string.IsNullOrEmpty(returnText)) 
     { 
      ..... 
+3

를 시도? – Nitin

+2

'value'는'string' 타입입니까? 'value as string '은'value'가'string'이 아닌 경우'null'을 리턴합니다. – Styxxy

답변

9

문제 및 해결

문제는 as string 변환하지 않는다는 것입니다, 그냥 문자열로 객체를 캐스팅합니다. 작동하지 않으면 대신 null이 생성됩니다. 객체는 원래 문자열 유형이어야하며,이 경우에는 분명히 그렇지 않습니다.

var returnText = value.ToString(); 

을하지만 정말 개체 유형에 따라 달라 않습니다, 그리고 .ToString() 방법이 실제로 무엇을 생산 그것의하십시오 가능성이 경우에 작동합니다

하나 개의 옵션과 같이 개체에 .ToString()를 호출하는 것입니다 . 당신은 당신이 기대하지 않는 가치를 얻을 수 있습니다. 객체가 시작하는 null 경우


추가 권장 팀은 논평함에 따라

, ToString() 예외가 발생합니다. 객체에 대한 메소드를 호출하기 전에이를 테스트하는 것이 좋습니다. 이런 식으로 뭔가 할 것입니다 :


string returnText = null; 
if(value != null) 
    returnText = value.ToString(); 
는 또한

See here for more information 읽기. 이 링크의 유용한 인용문은 다음과 같습니다.

as 연산자는 캐스트 연산과 같습니다. 그러나 변환이 불가능한 경우에는 예외가 발생하는 대신 null이 반환됩니다. 오퍼레이터는 AS만을 기준 전환 널 전환 복싱 변환을 수행하는

참고. as 연산자는 사용자 정의 변환과 같은 다른 변환을 수행 할 수 없으며 대신 캐스트 표현식을 사용하여 수행해야합니다.

+1

'value'가'null' 인 경우 예외가 발생합니다. 빈 문자열을 기본값으로 사용하려면'(value ?? "".ToString()') 할 수 있습니다. –

+0

@ 팀 : 좋은 지적. 가능한 한 자명 한 코드를 만들고 싶었 기 때문에 한 줄짜리 코드를 사용하지 않았습니다. 당신의 예제는 구문에 익숙하지 않은 경우 OP를 혼동 할 가능성이 높습니다. – musefan

1

이 때문에 var returnText = value as string; 의미 : 값을 string으로 설정하면 그렇지 않으면 null을 반환합니다. (C#을 참조)와 같은

http://msdn.microsoft.com/en-us/library/vstudio/cscsdfbt.aspx

System.Convert.ToString() 대신 .ToString()을의 ......이것은 IConvertable 인터페이스를 사용하기 때문에

차라리 var returnText = System.Convert.ToString(value);을 사용하십시오. ToString()은 망가진 결과를 가져올 수 있습니다. (클래스 이름 등 같은)

상세 정보 : 당신은 값의 유형이 문자열 인 것이 확실 Convert.ToString 방법http://msdn.microsoft.com/en-us/library/astxcyeh.aspx

+0

Convert는 Convert 메서드 자체이기 때문에 Convert가 작동하지 않는 것 같습니다. –

+0

전체 이름 (네임 스페이스 사용)을 사용해야합니다. System.Convert.ToString() –

+0

좋습니다. –

4

var returnText = value==null ? "": value.ToString(); 
+0

고마워요. ToString이 작동했습니다. –

관련 문제