2010-12-03 6 views
0

J'essaie d'écrire une méthode générique pour éviter la duplication de code. La méthode générique doit pouvoir accepter l'un des trois types de vue de grille différents, mais je ne peux pas obtenir la distribution suivante au début de la méthode générique; Comment puis-je lancer "grille" à l'un des trois types afin que je puisse alors faire quelque chose avec eux. J'essaie toujours de saisir l'idée et le concept derrière Generics.C# Génériques - Accepter différents types

+0

Les trois types ont-ils la même interface (pas l'interface dans un sens de langage, mais dans un sens API)? –

+0

Vous ne pouvez pas déclarer un var et l'initialiser plus tard. Cela doit être fait en une seule étape.Juste comme var a = 100 –

+0

Je ne suis pas sûr si elles observent toutes la même interface. J'ai actuellement trois méthodes distinctes acceptant chacune un type différent mais les propriétés de chaque type sont les mêmes, à savoir les méthodes sont identiques à l'exception du type de paramètre – Josata

Répondre

3

Si BrandedGridView et AdvBrandedGridView héritent de GridView vous pouvez ajouter une contrainte à votre

générique

...<T> where T : GridView

Sinon, vous pouvez utiliser Convert.ChangeType:

Essayez Convert.ChangeType:

if (typeof(T) == typeof(GridView)) 
{ 
    var grid = (GridView)Convert.ChangeType(gridView, typeof(GridView)); 
} 
elseif (typeof(T) == typeof(BrandedGridView)) 
{ 
    var grid = (BrandedGridView)Convert.ChangeType(gridView, typeof(BrandedGridView)); 
} 
+0

Que se passe-t-il si BrandedgridView n'est pas compatible avec gridview? Que va convertir Convert.ChangeType dans ce cas? –

+0

ChangeType est exactement ce que je cherche. – Josata

+0

Les trois types sont tous compatibles – Josata

1

Vous voulez contraindre le type T à quelque chose (probablement GridVi ew comme deux autres types en dérivent probablement) donc C# sait quelle méthode le T a, sinon il est juste de type Object.

public class MyClass<T> where T : GridView 

S'il vous plaît lire article sur générique sur MSDN pour plus de détails - http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx#csharp_generics_topic4

Note: Comme mentionné ci-dessus C# est pas JavaScript et « var » ne signifie pas « un type » il est bien que plus court déclarer l'objet du type du côté droit. C'est à dire. dans var my = new List() var est synonim pour List.

0

« méthodes sont identiques à l'exception du type de paramètre »

Je pense que vous devriez juste faire une nouvelle méthode qui a le différent type de paramètre de la vue que les paramètres réels. Ce sont eux qui sont différents après tout.