2012-06-07 3 views
2

나는 그래서 내가옵션 C# 매개 변수 문제

WriteErrorLog(l, "text"); 

같은 메소드를 호출 할 것으로 기대하지만 어쨌든 비주얼 스튜디오의 오류가 발생 :(

이 방법을

public static void WriteErrorLog(LogEntry logEntry, string method, [Optional, DefaultParameterValue(0)] int? errorTypeID) 

'WriteErrorLog'메서드에 대한 오버로드가 2 개의 인수를 취함

내가 누락 된 부분은 무엇입니까?

감사합니다.

+0

어떤 .NET 프레임 워크를 컴파일합니까? – kol

+0

VS2012rc, .NET 4.5에서 재현 할 수 없습니다 - 어떤 버전 (VS, .NET 등)을 사용하고 있습니까? –

+0

@Damien_The_Unbeliever VS2010 .NET 4.0을 사용했습니다 –

답변

16

[Optional, DefaultParameterValue(0)]을 사용하지 않아도됩니다. errorTypeId가 그 다음, Nullable 경우 null 될 기본 값이 안된다, 또한

public static void WriteErrorLog(LogEntry logEntry, string method, int? errorTypeID = 0) 

: 대신 C 스타일의 기본 매개 변수 구문을 사용해야합니까?

public static void WriteErrorLog(LogEntry logEntry, 
    string method, int? errorTypeID = 0) 

이 제대로 컴파일 :

public static void WriteErrorLog(LogEntry logEntry, string method, int? errorTypeID = null) 
6

문제가 있다면 [Optional]은 선택 사항이 아닙니다. 시도 :

public static void WriteErrorLog(LogEntry logEntry, string method, [Optional, DefaultParameterValue(0)] int? errorTypeID = null) 

선택적 매개 변수는 C# 4.0의 추가 및 방법 오버로드에 대한 간단한 대안했다. 후드에서는 기본 값을 포함하여 호출 할 때 확장됩니다. [Optional] 속성을 그대로 둘 수 있습니다. 그것은 전혀 아프지 않습니다. 사실, 나는 그것이 무엇인가 전혀하지 않는다고 확신하지 않는다. 추측해야만한다면 다른 과부하가 기본값을 처리 했으므로 생략 할 수있는 것을 표시하여 과부하를 사용하기 쉽게 만드는 것이 었습니다.

3

당신은 선택적 매개 변수이 방법을 명시해야합니다.

0

는 .NET 4 (또는 그 이상)를 사용하는 경우 : null 허용 유형에 대한 "기본"값이 null 것을

public static void WriteErrorLog(LogEntry logEntry, string method, int? errorTypeID = null) 

참고. C에서 사람들은 대개 -1 또는 0을 정수의 기본값으로 사용합니다. 이것은 C#에서 nullable로 더 명확하게 처리 할 수있는 것입니다. AFAIK에는 Haskell과 다른 언어들에서 비슷한 것이 있습니다.

0

나는 왜 당신을 위해 작동하지 않는지 모르겠다. 메서드 매개 변수를 입력 한 방식대로 복사했습니다. VS2010과 .NET 4.0을 사용합니다. 나는 코드를 실행했고 매번 잘 작동한다.

어쨌든 C 스타일 기본 매개 변수를 사용해야합니다. 그러나이 방법은 여전히 ​​나를 위해 작동합니다. 그러나 빨간색 밑줄이 표시되고 마우스 오버하면 같은 오류가 표시됩니다. 하지만 코드를 실행하면 모든 것이 제대로 작동합니다.