문제

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top