À l'aide de C# mot clé params dans un constructeur de types génériques
J'ai une classe générique en C# avec 2 constructeurs:
public Houses(params T[] InitialiseElements)
{}
public Houses(int Num, T DefaultValue)
{}
De la construction d'un objet à l'aide d'int comme le type générique et en le passant dans deux ints comme arguments les causes de la 'incorrect' constructeur à appeler (de mon point de vue).
E. g. Houses<int> houses = new Houses<int>(1,2)
- appels de la 2e construtor. En passant dans tout autre nombre d'entiers dans le constructeur va appeler le 1er constructeur.
Est-il un moyen de contourner ce problème autre que de retirer le mot clé params et en forçant les utilisateurs à passer un tableau de T lors de l'utilisation de la première constructeur?
OriginalL'auteur sixtowns | 2008-10-17
Vous devez vous connecter pour publier un commentaire.
Une meilleure solution serait d'avoir deux statique méthodes de fabrique. Si vous mettez le tout dans un nongeneric classe, vous pouvez également bénéficier de l'inférence de type:
Exemple d'appel:
Ensuite votre type générique du constructeur n'a pas besoin de la "params" peu, et il n'y aura pas de confusion.
OriginalL'auteur Jon Skeet
Peut-être à la place des Paramètres que vous avez pu passer dans IEnumerable
OriginalL'auteur Jon B
Le 2ème constructeur est un plus exacte match, ce qui est, les critères utilisés pour évaluer quel constructeur est correct.
OriginalL'auteur Joel Coehoorn
Le suivant depuis l'origine n'a pas trop d'information sur la classe etc.
Le compilateur va décider de la nouvelle Maison(1,2) correspond à la deuxième constructeur exactement et à l'utilisation que l'avis que j'ai pris la réponse avec le plus de votes et il ne fonctionne pas.
OriginalL'auteur