2013-10-29 4 views
4

의 널 (NULL) 결과를 확인 dialogResult.HasValue, "Expression is always true"입니다.나는이처럼 보이는 WPF 응용 프로그램에서 일부 코드를 작성했습니다 OpenFileDialog를

첫 번째 질문은 ReSharper가 dialogResult에 항상 결과가 있음을 알 수있는 것입니다. 즉, Microsoft.Win32.OpenFileDialog 클래스의 디 컴파일 된 코드로 바로 이동해야하며 null을 반환하지 않습니다. 어느 쪽이든, 아니면 특별히이 클래스에 대한 하드 코딩 된 경고 일뿐입니다.

둘째, 결과가 null이되지 않는다고 가정하는 것이 좋지 않은 것처럼 보입니다. Microsoft에서 null 값을 사용할 수있는 라이브러리의 차후 버전을 출시하면 어떻게 될까요? 이 문제에 관한 문서는 다음과 같습니다 : "In the current implementation, the derived classes (OpenFileDialog and SaveFileDialog) will only return true or false" 이것은 우리가 영원히 의지 할 수있는 영구적 인 배열이 아니라는 것을 의미합니다.

내가 지나치게 경계를 가리고 있는지 여부와 ReSharper가 시사하는 것처럼 줄을 제거해야하는지에 대한 생각은 무엇입니까?

답변

3

이상하게 보입니다. MSDN 사양에는 true 또는 false가 반환되지만 여전히 Nullable에 대한 이유가 있어야한다고 명시되어 있습니다.

저는 아래에있는 구현이 나쁜 습관이라고 가정 할 때 여러분과 절대적으로 동의 할 것입니다. 인터페이스별로 코드를 작성 했으므로이 경우 HasValue를 확인하는 것이 올바른 방법이라고 생각합니다.

리 샤퍼는 어떻게 알 수 있습니까? 나는 대답 할 수 없다. 내가 사용하는 것이 아닌 하드 코딩 된 것일 수도 있습니다.

이 당신에게 관심이있을 수 있습니다 When does Microsoft.Win32.OpenFileDialog.ShowDialog() return null?

그 사용자가 대화 상자를 종료하기 전에 결과이기 때문에 널의 possbility이있는 이유는 것 같다.

3

하드 코딩되었습니다. 당신은 프로그램 파일에서 ReSharper에서 디렉토리에 보면

, 당신은 이름에 으로 많은 Nullness.Gen를 XML 파일의 표시됩니다, 이러한 특정 요소가 있는지 여부에 관한 규칙이 포함/null는 아니고,이 표시되는 것과 같은 경고를 표시하는 데 사용되며, 정상적으로 표시되지 않습니다.

<member name="M:System.Windows.Controls.OpenFileDialog.ShowDialog"> 
    <attribute ctor="M:JetBrains.Annotations.NotNullAttribute.#ctor" /> 
</member> 
: 당신이 빈 \ ExternalAnnotations.NETFramework \ System.Windows에서 2.0.5.0.Nullness.Gen.xml 파일을 찾을 경우

, 당신은 아래로 절반 방법에 대한 다음 항목을 찾을 수 있습니다

그런 다음 NotNullAttribute에 대한 정의를 볼 수 bin에 JetBrains.Annotations에서 디렉토리를 볼 수 있습니다

<member name="T:JetBrains.Annotations.NotNullAttribute"> 
    <summary> 
    Indicates that the value of the marked element could never be <c>null</c> 
    </summary> 
    <example><code> 
    [NotNull] public object Foo() { 
     return null; // Warning: Possible 'null' assignment 
    } 
    </code></example> 
</member> 
+0

질문의 나머지 절반에 답변 해 주셔서 감사합니다. 저는 이것이 JetBrains의 실수이며 API가 null을 반환하지 않는다는 여전히 잘못된 가정이라고 생각합니다. 이것은 구현 세부 사항입니다. – Ian

+0

이 JMK를 명확히 해 주셔서 감사합니다[email protected]에 동의합니다. 이렇게 하드 코딩 된 가정을 만드는 것은 나쁜 프로그래밍 습관처럼 보입니다. 공용 인터페이스는 일반적으로 블랙 박스로 간주되어야하며 nullable 반환 유형이있는 경우이를 처리해야합니다. –

+0

여러 질문 중 서로 다른 부분에 각각 답을했기 때문에 두 대답을 합격으로 표시 할 수는 없습니다. 어쨌든 둘 다 upvoting. –