En Java, il est possible d'avoir des méthodes dans une énumération.
Existe-t-il une telle possibilité en C # ou s'agit-il simplement d'une collection de chaînes et c'est tout?
J'ai essayé de surcharger ToString()
mais cela ne compile pas. Est-ce que quelqu'un a un exemple de code simple?
Vous pouvez écrire méthodes d'extension pour les types enum:
enum Stuff
{
Thing1,
Thing2
}
static class StuffMethods
{
public static String GetString(this Stuff s1)
{
switch (s1)
{
case Stuff.Thing1:
return "Yeah!";
case Stuff.Thing2:
return "Okay!";
default:
return "What?!";
}
}
}
class Program
{
static void Main(string[] args)
{
Stuff thing = Stuff.Thing1;
String str = thing.GetString();
}
}
Vous pouvez écrire une méthode d'extension pour votre enum:
Comment: créer une nouvelle méthode pour une énumération (Guide de programmation C #)
Une autre option consiste à utiliser le Classe d'énumération créé par Jimmy Bogard .
Fondamentalement, vous devez créer une classe qui hérite de son Enumeration
. Exemple:
public class EmployeeType : Enumeration
{
public static readonly EmployeeType Manager
= new EmployeeType(0, "Manager");
public static readonly EmployeeType Servant
= new EmployeeType(1, "Servant");
public static readonly EmployeeType Assistant
= new EmployeeType(2, "Assistant to the Regional Manager");
private EmployeeType() { }
private EmployeeType(int value, string displayName) : base(value, displayName) { }
// Your method...
public override string ToString()
{
return $"{value} - {displayName}!";
}
}
Ensuite, vous pouvez l'utiliser comme une énumération, avec la possibilité d'y insérer des méthodes (entre autres):
EmployeeType.Manager.ToString();
//0 - Manager
EmployeeType.Servant.ToString();
//1 - Servant
EmployeeType.Assistant.ToString();
//2 - Assistant to the Regional Manager
Vous pouvez le télécharger avec NuGet .
Bien que cette implémentation ne soit pas native dans le langage, la syntaxe (construction et utilisation) est assez proche des langages qui implémentent des énums nativement meilleurs que C # ( Kotlin par exemple).
Nan. Vous pouvez créer une classe, puis ajouter un tas de propriétés à la classe pour n pe émuler une énumération, mais c'est pas vraiment la même chose.
class MyClass
{
public string MyString1 { get{ return "one";} }
public string MyString2 { get{ return "two";} }
public string MyString3 { get{ return "three";} }
public void MyMethod()
{
// do something.
}
}
Un meilleur modèle serait de mettre vos méthodes dans une classe distincte de votre emum.
Depuis que je suis tombé sur le problème et que j'ai eu besoin de l'opposé d'enum to string, voici une solution générique:
static class EnumExtensions {
public static T GetEnum<T>(this string itemName) {
return (T) Enum.Parse(typeof(T), itemName, true);
}
}
Cela ignore également le cas et est très pratique pour analyser REST-Response à votre enum afin d’obtenir plus de sécurité. Espérons que cela aide quelqu'un