문제
C# 4.0에있는 것처럼 C# 3.0에 옵션 매개 변수를 추가하는 방법이 있습니까? 이 기능이 있어야합니다. 기다릴 수 없습니다!
편집하다:
이를 달성하기위한 작업 계정/해킹을 알고 있다면 게시하십시오. 감사!
해결책
익명 유형과 반사를 명명 된 매개 변수의 해결 방법으로 사용할 수 있습니다.
public void Foo<T>(T parameters)
{
var dict = typeof(T).GetProperties()
.ToDictionary(p => p.Name,
p => p.GetValue(parameters, null));
if (dict.ContainsKey("Message"))
{
Console.WriteLine(dict["Message"]);
}
}
이제 나는 다음과 같이 Foo라고 부를 수 있습니다.
Foo(new { Message = "Hello World" });
... 그리고 그것은 내 메시지를 쓸 것입니다.
기본적으로 전달 된 익명 유형에서 모든 속성을 추출하고 문자열과 객체 (속성의 이름과 그 값)의 사전으로 변환합니다.
다른 팁
항상 메소드 과부하가 있습니다. :)
불행하게도. 이를 지원하려면 C# 4.0 컴파일러가 필요합니다. 오늘날 .NET 플랫폼에서 옵션 매개 변수를 원한다면 VB .NET 또는 F#을 시도 할 수 있습니다.
Dustin이 말했듯이 선택적 매개 변수는 C# 4.0으로 제공됩니다. 선택적 매개 변수를 시뮬레이션하는 한 종류의 엉터리 방법은 마지막 인수로서 [] (또는 더 강하게 유형 된 배열)를 갖는 것입니다.
변수 인수를 옵션 매개 변수로 사용할 수도 있습니다. 이 작동 방식의 예는 String.format ()입니다.
여기를 봐:
http://blogs.msdn.com/csharpfaq/archive/2004/05/13/131493.aspx
제휴하지 않습니다 StackOverflow