2016-07-25 8 views
1

요청에 따라 형식이 변경되므로 "var"변수를 선언해야하는 코드가 있습니다. 이 선언은 예외를 잡기 위해 try 블록 내에서 만들 수있다 : 범위 외부의 try catch 블록을 종료 이후 암시 적으로 형식화 된 로컬 변수를 초기화해야합니다. 범위 정의

try 
{ 
    var calc = (Type1)obj; 
    var results = calc.Function(); 
} 
catch 
{ 
    var calc = (Type2)obj; 
    var results = calc.Function(); 
} 
finally 
{ 
    return results; 
} 

지금 문제는, "결과는"작동하지 않습니다됩니다. 타입 캐스팅을 검사하고 그에 따라 타입을 변경해야하기 때문에 var를 try로 선언 할 수는 없습니다.

유형 1, 유형 2는 다른 인터페이스이며 obj는 다른 유형을 가질 수있는 "var"입니다.

var 외부 try 블록을 null로 시작할 수 없습니다. 어떻게해야합니까?

+1

, 무엇을 타입은 당신이 그것을 기대합니까? 'var'는'object' 나'dynamic'과 같지 않습니다. 'var'에 대한 문서를 정말로 읽어야합니다. 여러분은 그것을 이해하는 것을 멀리하고 있습니다. –

+0

저는 null로 초기화하려고하지 않습니다. 그것은 내 관심사가 아닙니다. 내가 찾고있는 것은 "결과"를 반환하는 것입니다.이 결과는 try 블록이 실행되는지 또는 catch 블록이 실행되는지에 따라 데이터 세트 또는 데이터 테이블이 될 수 있습니다. – user5820237

+1

'var'은 코드를 혼란스럽게 만들 수 있습니다. 남용하지 마십시오. 반환 형식의 메서드를 사용하는 경우 형식을 언급하면 ​​코드가 훨씬 읽고 이해하기 쉽습니다. –

답변

1

두 반환 지점 대신 중 하나가 :

var results = //determine the result type here 
try 
{ 
    var calc = (Type1)obj; 
    return calc.Function(); 
} 
catch 
{ 
    var calc = (Type2)obj; 
    return calc.Function(); 
} 

또한

obj가 예외를 피하기 위해 캐스트를 시도하기 전에 형 타입 1의 경우, 당신은 확인해야합니다.

if (obj is Type1) 
{ 
    return (obj as Type1).Function(); 
} 
else 
{ 
    return (obj as Type2).Function(); 
} 

또한 당신이 두 반환 형식이 잠재적으로이 작업을 수행 할 수있다,을 준수해야하는 반환 형식이 있어야합니다 (그러나 이것은 권장하지 않습니다) 이후 :

var result = //type of return type 
    try 
{ 
    var calc = (Type1)obj; 
    result = calc.Function(); 
} 
catch 
{ 
    var calc = (Type2)obj; 
    result = calc.Function(); 
} 
finally 
{ 
return result; 
} 
+0

결과는 데이터 테이블 또는 호출을 기반으로하는 데이터 세트가 될 수 있습니다. – user5820237

+0

어느 쪽이든 함수 반환 형식에는 양쪽 모두를 포함해야합니다 (반환 형식은 가능한 두 결과에 반비례해야합니다) – barakcaf

+0

도움 주셔서 감사합니다. 나는 너의 제안을 계속할 것이다. – user5820237

0
이 같이

깨끗한 코드 관점에서 가장 좋은 방법은 Type1type2이 구현하는 공통 인터페이스를 정의하는 것입니다.

이제 유형에 전환 할 필요하지는 쉽게 할 수 있도록 try/catch에서 result을 정의 할 수 있습니다 적절 finally 핸들이 : 당신이 null``로`var`를 초기화하면

MyType result = null; 
try 
{ 
    IFoo foo = obj as IFoo; 
    results = foo.Function(); 
} 
catch 
{ 
    ... 
} 
finally 
{ 
    return results; 
} 
관련 문제