당신은 할 수 없습니다 그 주위에 방법이 없기를. 그 이유 중 하나는 CLR이 out
을 지원하지 않으며 ref
만 지원한다는 것입니다. 따라서 out
은 실제로는 C# 컴파일러에서 추가 된 몇 가지 특별한 규칙을 가지고 ref
으로 표현됩니다.
그 주변의 간단한 (그리고 분명한) 방법은 별도의 변수를 생성하는 것입니다 : 당신은 도우미 메서드를 만들 수
string[] resultArray;
SomeMethod(out resultArray);
IEnumerable<string> result = resultArray;
가 할을 당신을 위해 캐스팅 :
public delegate void ActionWithOut<T>(out T result);
public static void ConvertOut<TBase, TDerived>(
ActionWithOut<TDerived> method, out TBase result)
where TDerived : TBase
{
TDerived derived;
method(out derived);
result = derived;
}
사용법 :
IEnumerable<string> result;
ConvertOut<IEnumerable<string>, string[]>(SomeMethod, out result);
그러나 매개 변수의 개수와 t마다 별도의 오버로드 (및 위임 유형)가 필요합니다. 그는 코드가 실제로 훨씬 좋아 보이지 않습니다. 형식 매개 변수가 필요하므로 형식 유추가이 코드에서 작동하지 않는 것 같습니다.
이러한 변수의 범위에 대한 자세한 코드와 컨텍스트가 필요합니다. – Matt
그들은 같은 범위에 있습니다. 그들이 다른 범위에 있다면 나는 그것을 나타냅니다. 내가 너를 오해 한 경우 정정을 위해 알려줘. – hattenn