Est-il possible en C # de surcharger un opérateur de casting générique de la manière suivante?

StackOverflow https://stackoverflow.com/questions/1025576

Question

Je me demandais s'il était possible de représenter le code suivant en 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)
    }
}

Merci

Était-ce utile?

La solution

Les opérateurs de conversion ne peuvent pas être génériques. À partir de la section de spécification 10.10, voici le format d'un déclarant de conversion-opérateur:

conversion-operator-declarator:
    implicit   operator   type   (   type   identifier   )
    explicit   operator   type   (   type   identifier   )

Comparez ceci avec, par exemple, un en-tête de méthode:

  

en-tête de méthode :    attributs opt modificateurs de méthode opt partiel opt type de retour    nom de membre liste de paramètres de type opt ( liste de paramètres formels opt )    clauses de type paramètre-paramètre opt

(Désolé pour le formatage, vous ne savez pas comment le faire mieux.)

Notez que le format de l'opérateur n'inclut pas de liste de paramètres de type ni de contraintes de paramètre de type.

Autres conseils

Votre code se résume à la ligne: return new Foo<U>((U)a.Item)

Où vous essayez d'affecter une classe de base à une classe héritée, ce qui est impossible.

Disons que T (classe de base) est de type Stream et U est de type MemoryStream (classe héritée), vous ne pouvez pas affecter de <=> à une variable de type <=>.

Je pense que la réponse courte est & "Impossible." Essayez d’utiliser une méthode à la place & Quot;

semble également être dupe de cette question Solution de contrainte d’opérateur surchargée dans les génériques .NET

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top