2017-07-28 5 views
0

Comment passez-vous un type d'alias défini par using à la classe générique?Comment utiliser un type d'alias en tant que paramètre de type générique dans C#

J'ai essayé le code suivant:

using ID = Int32; // it might be replaced with `String`. 
using CC = C<ID>; 

public class C<T> { 
    T id; 
} 

et il y aura une erreur:

Error CS0246 The type or namespace name 'ID' could not be found (are you missing a using directive or an assembly reference?)

Mais la directive en utilisant est juste au-dessus de la ligne où l'erreur se produit. Ai-je raté quelque chose?

+1

Qu'est-ce que vous essayez d'atteindre? – mayu

+0

Cela ne semble pas possible pour le moment, plase voir le premier commentaire [ici] (http://stackoverflow.com/q/3720222/303290) –

+1

Alors que le doublon lié cite la spécification, il y a un moyen de contourner , déclare 'ID' dans l'espace de nom externe et' CC' dans un espace de noms interne. Le fait qu'ils soient dans le même espace de noms est le problème ici. –

Répondre

0

Je ne sais pas vraiment ce que vous essayez d'atteindre avec cela, mais vous pouvez cependant faire quelque chose de similaire avec l'héritage

public class CC : C<ID> 
{ 
} 

La classe CC tirera de C<T> avec un type de béton. Par conséquent CC.T sera de type Int32 (ou autre).

-1

N'utilisez pas d'alias.

public class C<T> { 
    T id; 
} 

...

void Foo() { 
    var x = new C<Int32>(); 

    var y = new C<string>(); 
}