2009-04-16 3 views
4

메서드에서 인수가 null이 아니도록 요구하는 더 좋은 방법이 있습니까? 아래 보이는 것처럼, 내 메소드가 요구하는 인수가 null인지 계속 확인합니다. 그러나 더 좋은 방법이 있는지 궁금합니다.메소드에 제공된 인수가 널이 아니도록 요구하는 방법이 있습니까?

public void MyMethod(string a, int b) 
{ 
    if(a==null){throw new ArgumentNullException("a");} 
    if(b==null){throw new ArgumentNullException("b");} 

    //more stuff here 
} 
+0

다음은 거의 정확한 복제입니다. http://stackoverflow.com/questions/718630/not-nullable-types – BenAlabaster

답변

1

더 좋은 방법은 없습니다. 이것은 수많은 Microsoft 라이브러리가이 상황을 처리하는 방식입니다.

언제든지 확장 방법을 사용하여 좀 더 명확하게 할 수 있습니다.

1

저는 개인적으로 CuttingEdge.Conditions을 좋아합니다. 사용하기 쉽고 훨씬 더 읽기 쉽습니다.

1

이 내가 C는 #은 C++에서 뒤쪽으로 갔다 생각하는 몇 가지 분야 중 하나입니다.

C++에서

, 당신은

void foo(Bar& bar) { /*...*/ } 

은 아주 명확하게 컴파일러와 fooBar의 실제 인스턴스를 걸린 다른 사람 모두에 표시하기 위해 작성할 수 있습니다. 예, 가능하다면 - 노력으로 - foo null 참조를 전달할 수 있지만 그건 정말 합법적이지 C++. C#에서 (종류의)

유일한 "솔루션"당신의 예에서 (null 수 없습니다 .NET에서 값 유형으로, struct의 대신 class ES를 만드는 것입니다, Bnull 될 수 없습니다 System.Int32이기 때문에). bar()에 대한 호출이 컴파일되지 않습니다 :

class A { } 
    struct B { } 

    static void foo(A a) { } 
    static void bar(B b) { } 

    static void Main(string[] args) 
    { 
     foo(null); 
     bar(null); 
    } 

C#을 그것을 만들었하는 것이 좋았을 것처럼 확실히 보인다 (훨씬) 더 어려운 null 참조가하는 단계; 예를 들어 F #에는 null 입력 가능 유형이 없습니다.

이 문제와 관련된 몇 가지 흥미로운 설명은 Null References: The Billion Dollar Mistake (및 설명)을 참조하십시오.


편집 :Eric Lippert에서 2013년 2월 각주 말한다 "... 그냥 그렇게 C#을이 때 처음으로 항상 null이 참조 유형을 가지고 구현 일어났다, ... 그것은 그럴 듯 보인다 Nullable<T>이 가질 수있는 어떤 유형에서도 작동하도록 구현되었으며 참조 유형은 기본적으로 nullable이 될 수 없습니다. "null 일 수있는 문자열"을 나타낼 수있는 유일한 시스템은 Nullable<string>입니다. ... "

관련 문제