Javaでは、enum内にメソッドを含めることができます。
C#にそのような可能性はありますか、それとも単なる文字列コレクションですか?
ToString()
をオーバーライドしようとしましたが、コンパイルされません。誰かが簡単なコードサンプルを持っていますか?
次のように書くことができます 拡張メソッド 列挙型の場合:
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();
}
}
列挙型の拡張メソッドを書くことができます:
別のオプションは、Jimmy Bogardによって作成された Enumeration Class を使用することです。
基本的に、Enumeration
を継承するクラスを作成する必要があります。例:
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}!";
}
}
次に、enumのようにそれを使用できます(その中にメソッドを配置する可能性があります)。
EmployeeType.Manager.ToString();
//0 - Manager
EmployeeType.Servant.ToString();
//1 - Servant
EmployeeType.Assistant.ToString();
//2 - Assistant to the Regional Manager
NuGet 。でダウンロードできます
この実装は言語のネイティブではありませんが、構文(構築と使用法)は、C#よりもネイティブでenumを実装する言語にかなり近いです(たとえば、 Kotlin )。
いや。クラスを作成し、クラスに一連のプロパティを追加してsomewhat enumをエミュレートできますが、それは実際には同じではないです。
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.
}
}
より良いパターンは、emumとは別のクラスにメソッドを配置することです。
私が出会い、列挙型と文字列の正反対が必要だったので、ここに一般的な解決策があります:
static class EnumExtensions {
public static T GetEnum<T>(this string itemName) {
return (T) Enum.Parse(typeof(T), itemName, true);
}
}
また、これは大文字と小文字を無視し、列挙型へのREST-Responseを解析して型安全性を高めるのに非常に便利です。うまくいけばそれは誰かを助ける