Mon problème peut être simplifié en Liste <> avec les coordonnées X et Y que je voudrais regrouper dans une interface ou une classe abstraite. J'ai alors un tas d'autres fonctions qui prennent cette classe abstraite comme argument. La mise en garde à ceci est que l'élément X est soit d'un numérique ou est un DateTime. Voici quelques exemples de code pour illustrer ce que je suis en train de faire:C#: Interface avec Number ou DateTime
//C# 4.0
abstract class Element : Group<DateTime, double>
{
public DateTime X {get; set;}
public double Y {get; set;}
}
public interface Group<T, U>
{
public T X {get; set;}
public U Y {get; set;}
}
void OtherObject.Do(List<Group<DateTime, double>> elm)
{
double[] X = 0;
for (int i = 0; i < elm.Count; i++)
{
if (elm[i].GetType() == typeof(DateTime))
{
X[i] = ((DateTime)elm[i].X).TOADate();
{
else
{
X[i] = elm.X;
}
}
//Other stuff
}
static Main()
{
List<Element> list = FactoryCreate();
OtherObject obj = new OtherObject();
obj.Do(list);
}
Je voudrais être en mesure de préciser l'argument List<Group<DateTime, double>>
-Do()
sans préciser que les types génériques. J'aimerais juste pouvoir faire Do(List<Group> lst)
.
I il suffit d'éliminer les paramètres de type générique et d'utiliser le type de données dynamique dans le groupe, mais je ne pense pas que c'est la meilleure façon.
Existe-t-il un modèle établi pour résoudre ce problème? Je suis ouvert à 100% aux suggestions quant à la façon correcte de modéliser cette structure/classe de données.
Vous devez spécifier les types dans Do(), car vous appelez X.TOADate(). Le compilateur doit savoir où trouver la méthode TOADate(), il doit donc savoir quel type est X. –
Ajout d'un cast (15 caractères) – David
Je ne comprends pas vos besoins. Pourquoi exactement voulez-vous vous débarrasser des arguments de type explicite dans 'D()' si cette méthode utilise activement les connaissances à leur sujet? –