제네릭을 사용한 C # 8 nullable 참조 형식 처리의 일관성없는 동작

일리아 체 르노 모딕

이 코드가 있습니다.

public T? Foo<T>()
    where T : class?
{
    return null;
}

논리적이고 예상되는 오류를 제공합니다.

nullable 형식 매개 변수는 값 형식 또는 nullable이 아닌 참조 형식으로 알려 져야합니다. '클래스', '구조'또는 유형 제약 조건을 추가하는 것을 고려하십시오.

이제 제약 조건을 하나 더 추가합니다.

public T? Foo<T>()
    where T : class?, IDisposable // Could be any interface I guess
{
    return null;
}

이제 흥미롭게도 충분한 오류가 사라졌습니다. 정말 나에게 보이지만 인터페이스이기 때문에 우리는 충돌 제약이 non-nullalbe동안 class?이다.

여기에 뭔가 빠졌거나 컴파일러에 문제가 있습니까?

canton7

제네릭 형식 제약 조건 where T : IDisposable은 " T이 null이 아니어야하며 IDisposable" 를 구현해야 함을 의미 합니다 . nullability가 다른 여러 제네릭 형식 제약 조건이있는 경우 제약 조건 전체는 모든 제약 조건이 nullable 인 경우에만 nullable입니다.

따라서 class?nullable이라는 사실 IDisposable은 그렇지 않은 사실에 의해 무시됩니다 .

당신은 필요합니다 where T : class?, IDisposable?.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

제네릭 형식과 함께 nullable 참조 형식을 사용하는 동안 경고 받기

분류에서Dev

제네릭 형식에 대한 nullable 참조 형식을 식별하는 방법은 무엇입니까?

분류에서Dev

C # 8에서 하위 클래스 제약 조건을 사용할 때 제네릭 참조 형식이 nullable이되도록 지정하는 방법은 무엇입니까?

분류에서Dev

메서드의 반환 형식으로 C # 8에서 nullable 제네릭 형식을 허용하는 방법은 무엇입니까?

분류에서Dev

Nullable <T>와 동일한 컴파일러 동작을 사용하는 C # 사용자 지정 제네릭 구조체

분류에서Dev

C # 8 nullable 참조 형식을 "this ca n't be null"로 표시

분류에서Dev

C # 8 nullable 참조 형식이있는 TryGetValue 패턴

분류에서Dev

C # 8.0 nullable 참조 형식과 결합 할 때 값 또는 문자열 형식에 대한 제네릭 형식 제약 조건을 선언 할 수 있습니까?

분류에서Dev

ORM과 함께 DTO 클래스를 사용할 때 C # 8의 Nullable 참조 형식

분류에서Dev

제네릭 형식을 사용하는 C # 람다 쿼리

분류에서Dev

C # 8 nullable 참조 형식에 대한 정보가 .NET 어셈블리에 저장되어 있습니까?

분류에서Dev

제네릭 클래스에서 nullable 형식을 처리하는 방법

분류에서Dev

제네릭 형식의 정확한 형식 제약 조건-C #

분류에서Dev

C # 8에서 새 식에 대한 형식 유추로 인해 nullable 참조가 생성되는 이유는 무엇입니까?

분류에서Dev

형식에 대한 제약 조건이있는 제네릭의 C # 이름

분류에서Dev

nullable 참조 형식을 사용하는 c # editorconfig CA1062 null 검사 유효성 검사 메서드 (guard 절용)

분류에서Dev

C # 8 nullable 및 non-nullable 참조 형식-입력이 nullable 인 경우에만 nullable 출력

분류에서Dev

참조 유형을 허용하는 제네릭 메서드가 nullable 유형을 인수로 허용하지 않는 이유는 무엇입니까?

분류에서Dev

지정된 형식에 대한 연산자 오버로드가있을 때 C # 컴파일러는 제네릭 메서드에서 참조 동등성을 어떻게 결정합니까?

분류에서Dev

제네릭 형식의 XmlElement 이름을 사용한 XML 직렬화-C #

분류에서Dev

제네릭 형식의 XmlElement 이름을 사용한 XML 직렬화-C #

분류에서Dev

C # 8의 nullable이 아닌 참조 형식은 런타임에서 null이 될 수 있습니까?

분류에서Dev

C # 제네릭 형식의 다형성

분류에서Dev

제네릭으로 사용할 경우 Nullable 열거 형 형식을 null에 할당 할 수 없습니다.

분류에서Dev

F #에서 nullable 참조 형식을 사용하여 C # 인터페이스 구현

분류에서Dev

C # 8.0의 nullable 옵션을 사용하여 제네릭에 대한 문제를 어떻게 처리해야합니까?

분류에서Dev

C #식이 참조 형식을 사용하는 경우 활동에서 예외가 발생 함

분류에서Dev

제네릭을 사용한 C # 형식 안전 복제

분류에서Dev

C # 8 nullable이 아닌 참조 및 암시 적 사용

Related 관련 기사

  1. 1

    제네릭 형식과 함께 nullable 참조 형식을 사용하는 동안 경고 받기

  2. 2

    제네릭 형식에 대한 nullable 참조 형식을 식별하는 방법은 무엇입니까?

  3. 3

    C # 8에서 하위 클래스 제약 조건을 사용할 때 제네릭 참조 형식이 nullable이되도록 지정하는 방법은 무엇입니까?

  4. 4

    메서드의 반환 형식으로 C # 8에서 nullable 제네릭 형식을 허용하는 방법은 무엇입니까?

  5. 5

    Nullable <T>와 동일한 컴파일러 동작을 사용하는 C # 사용자 지정 제네릭 구조체

  6. 6

    C # 8 nullable 참조 형식을 "this ca n't be null"로 표시

  7. 7

    C # 8 nullable 참조 형식이있는 TryGetValue 패턴

  8. 8

    C # 8.0 nullable 참조 형식과 결합 할 때 값 또는 문자열 형식에 대한 제네릭 형식 제약 조건을 선언 할 수 있습니까?

  9. 9

    ORM과 함께 DTO 클래스를 사용할 때 C # 8의 Nullable 참조 형식

  10. 10

    제네릭 형식을 사용하는 C # 람다 쿼리

  11. 11

    C # 8 nullable 참조 형식에 대한 정보가 .NET 어셈블리에 저장되어 있습니까?

  12. 12

    제네릭 클래스에서 nullable 형식을 처리하는 방법

  13. 13

    제네릭 형식의 정확한 형식 제약 조건-C #

  14. 14

    C # 8에서 새 식에 대한 형식 유추로 인해 nullable 참조가 생성되는 이유는 무엇입니까?

  15. 15

    형식에 대한 제약 조건이있는 제네릭의 C # 이름

  16. 16

    nullable 참조 형식을 사용하는 c # editorconfig CA1062 null 검사 유효성 검사 메서드 (guard 절용)

  17. 17

    C # 8 nullable 및 non-nullable 참조 형식-입력이 nullable 인 경우에만 nullable 출력

  18. 18

    참조 유형을 허용하는 제네릭 메서드가 nullable 유형을 인수로 허용하지 않는 이유는 무엇입니까?

  19. 19

    지정된 형식에 대한 연산자 오버로드가있을 때 C # 컴파일러는 제네릭 메서드에서 참조 동등성을 어떻게 결정합니까?

  20. 20

    제네릭 형식의 XmlElement 이름을 사용한 XML 직렬화-C #

  21. 21

    제네릭 형식의 XmlElement 이름을 사용한 XML 직렬화-C #

  22. 22

    C # 8의 nullable이 아닌 참조 형식은 런타임에서 null이 될 수 있습니까?

  23. 23

    C # 제네릭 형식의 다형성

  24. 24

    제네릭으로 사용할 경우 Nullable 열거 형 형식을 null에 할당 할 수 없습니다.

  25. 25

    F #에서 nullable 참조 형식을 사용하여 C # 인터페이스 구현

  26. 26

    C # 8.0의 nullable 옵션을 사용하여 제네릭에 대한 문제를 어떻게 처리해야합니까?

  27. 27

    C #식이 참조 형식을 사용하는 경우 활동에서 예외가 발생 함

  28. 28

    제네릭을 사용한 C # 형식 안전 복제

  29. 29

    C # 8 nullable이 아닌 참조 및 암시 적 사용

뜨겁다태그

보관