짧은 버전 : out
인수 뒤에 명명 된 인수는 컴파일러 오류를 발생 시키지만 언어 사양에서이 동작에 대한 지원을 찾을 수 없습니다.C#의 매개 변수와 명명 된 매개 변수 혼합 : 왜 매개 변수의 이름을 지정해야합니까?
긴 버전 :
나는 Enum.TryParse<TEnum>
세 가지 매개 변수 오버로드를 사용하고 있습니다,하지만 난 내 코드를 명확하게 할 수있는 ignoreCase
매개 변수와 같은 호출 이름을 선호하는 것 :
MyEnum res;
b = Enum.TryParse<MyEnum>(inputString, true, out res);
잎 불리언 값의 의미는 명확하지 않다 (이 방법이 알려져 있지 않다면). 그러므로 내가 사용하고 싶습니다 :
Named argument 'ignoreCase' specifies a parameter for which a positional argument has already been given
와 IDE ignoreCase
매개 변수를 강조 :
b = Enum.TryParse<MyEnum>(inputString, out res, ignoreCase: true);
오류로 컴파일러 보고서이 그러나
. .NET 4를 대상으로하는 VS2010 및 4 또는 4.5를 대상으로하는 VS11 베타 모두 동일한 결과를 제공합니다. 모든 경우에out
매개 변수의 이름을 지정하면 오류가 제거됩니다.
b = Enum.TryParse<MyEnum>(inputString, result: out res, ignoreCase: true);
나는 프레임 워크에서 내 어셈블리에 모두 (피 제네릭 포함) 다른 방법의 숫자에 걸쳐이 시도 2했습니다 항상 같은 결과를 : 명명 된 매개 변수 뒤에 out
매개 변수를 제공합니다 오류. 나는이 오류의 이유를 볼 수 없습니다
및 § 7.5.1 인수를 나열 C# 언어 사양의 : 버전 4.0 명명 된 매개 변수 뒤에 out
가 제공해야하는 이유 모든 이유를 제공하지 않는 것 오류. 오류의 텍스트는 버그로 해석 할 수 있습니다 : ignoreCase
에 대해 유효한 일치 일 수있는 위치 인수가 없습니다.
사양을 잘못 읽었습니까? 또는이 컴파일러 버그가 무엇입니까?
1 따라서 프레임 워크 디자인 가이드 라인의 조언은 enum
매개 변수를 선호합니다.
2 예는 : 주어진 :
private static void TestMethod(int one, float two, out string three) {
three = "3333";
}
이 호출은 또한 명명 된 매개 변수에 동일한 오류를 제공 이것을 out
매개 변수도 이름이되지 아니하는
TestMethod(1, out aString, two: 1.0f);
이
사양을 다시 읽으면이 접근법을 알 수 있습니다. 이름이 지정된 매개 변수를 명명 된 인수와 일치시킨 다음 나머지 위치 매개 변수와 나머지 위치 매개 변수를 일치시키는 방식으로 PowerShell 방식을 사용하지 않습니다. – Richard