J'ai un Generic Abstract Class
avec des propriétés comme Id
, Name
, Status
, cette classe hérite de plusieurs catalogues. Ma question est de savoir s'il est possible de créer une méthode avec une restriction pour les catalogues qui implémentent la classe abstraite.Type générique Contrainte où class implémente une classe abstraite
Je donne quelques exemples afin qu'ils comprennent ce que je veux faire:
public abstract class AbsCatalog<T>
{
public T Id { get; set; }
public string Name { get; set; }
public bool Status { get; set; }
}
Ce sont les classes qui mettent en œuvre la abstract class
public class Agent : AbsCatalog<string>
{
public string Office { get; set; }
public Estado Estado { get; set; }
}
public class Models : AbsCatalog<int>
{
public int Year { get; set; }
public string Description { get; set; }
}
La méthode que je veux mettre en œuvre est le suivant:
List<Agent> Agents = service.GetAgents();
string AgentsDescription = GetDescription<Agent>(Agents);
List<Model> Models = service.GetModels();
string ModelsDescription = GetDescription<Model>(Models);
private string GetDescription<T>(List<T> list) where T : AbsCatalog<T>
{
string description = string.Empty;
if (list.Exists(x => x.Id.ToString() == "0"))
description = "";
else
description = string.Join(", ", list.Where(x => x.Status).Select(x => x.Name).ToArray());
return description;
}
Mais dans la validation, il marque une erreur: 'if (List.exists (x => x.Id .ToString() == "0")) ' Parce que maintenant Id est de type U – Richard
Cela ne peut pas être une erreur car tout hérite de' object' qui a 'ToString'. En outre, vous ne devriez pas vérifier avec '==" 0 "', au lieu de considérer 'default (U)' ou passer une valeur par défaut à la méthode. – DavidG