문제

C# 3.5에서 다음 코드를 나타내는 것이 어쨌든 궁금합니다.

public struct Foo<T> {

    public Foo(T item) {
        this.Item = item;
    }

    public T Item { get; set; }

    public static explicit operator Foo<U> ( Foo<T> a )
        where U : T {

        return new Foo<U>((U)a.Item)
    }
}

감사

도움이 되었습니까?

해결책

변환 연산자는 일반적 일 수 없습니다. 사양 섹션 10.10에서 다음은 변환 운영자 디렉터의 형식입니다.

변환 운영자 디렉터:
    implicit   operator   유형   (   유형   식별자   )
    explicit   operator   유형   (   유형   식별자   )

이것을 메소드 헤더와 비교하십시오.

메소드 헤더: 속성고르다 방법 수수제고르다 부분적고르다 반환 유형 회원 이름 유형 파라미터 목록고르다 ( 공식적인 파라미터 목록고르다 ) 유형 파라미터-제약 조항고르다

(형식에 대해 죄송합니다 - 어떻게 더 잘하는지 잘 모르겠습니다.)

연산자 형식에는 유형 매개 변수 목록 또는 유형 매개 변수 제한 조건이 포함되어 있지 않습니다.

다른 팁

코드가 줄로 늘어납니다. return new Foo<U>((U)a.Item)

베이스 클래스를 상속 클래스에 할당하려고하는 곳은 불가능합니다.

T (Base-Class)가 유형이라고 가정 해 봅시다. Stream 그리고 당신은 유형입니다 MemoryStream (상속 클래스), 당신은 할당 할 수 없습니다 Stream 변수 유형으로 MemoryStream.

짧은 대답은 "불가능하다. 대신 메소드를 사용해보십시오"라고 생각합니다.

또한이 질문의 속임수 인 것 같습니다.NET 제네릭의 과부하 작업자 구속 조건에 대한 솔루션

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