ใน Java เป็นไปได้ที่จะมีวิธีการภายใน enum
มีความเป็นไปได้เช่นนี้ใน C # หรือเป็นเพียงแค่การรวบรวมสตริงและนั่นคืออะไร
ฉันพยายามที่จะแทนที่ToString()
แต่มันไม่ได้รวบรวม มีใครมีตัวอย่างรหัสง่ายๆ?
ใน Java เป็นไปได้ที่จะมีวิธีการภายใน enum
มีความเป็นไปได้เช่นนี้ใน C # หรือเป็นเพียงแค่การรวบรวมสตริงและนั่นคืออะไร
ฉันพยายามที่จะแทนที่ToString()
แต่มันไม่ได้รวบรวม มีใครมีตัวอย่างรหัสง่ายๆ?
คำตอบ:
คุณสามารถเขียนวิธีการขยายสำหรับประเภท 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();
}
}
คุณสามารถเขียนวิธีการขยายสำหรับ enum ของคุณ:
วิธีการ: สร้างวิธีการใหม่สำหรับการแจงนับ (คู่มือการเขียนโปรแกรม C #)
อีกตัวเลือกหนึ่งคือการใช้ระดับการแจงนับที่สร้างขึ้นโดยจิมมี่ Bogard
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
แม้ว่าการใช้งานนี้ไม่ได้มีอยู่ในภาษา แต่ไวยากรณ์ (การสร้างและการใช้งาน) ค่อนข้างใกล้เคียงกับภาษาที่ใช้ enums ดีกว่า C # ( ตัวอย่างเช่นKotlin )
Nope คุณสามารถสร้างชั้นแล้วเพิ่มพวงของคุณสมบัติในชั้นเรียนจะค่อนข้างเลียนแบบ enum แต่ thats ไม่ได้จริงๆในสิ่งเดียวกัน
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.
}
}
รูปแบบที่ดีกว่าคือการใส่วิธีการของคุณในชั้นเรียนแยกจากอีมูมของคุณ
ตั้งแต่ฉันเจอและต้องการสิ่งที่ตรงกันข้ามกับ enum ถึง string นี่คือคำตอบทั่วไป:
static class EnumExtensions {
public static T GetEnum<T>(this string itemName) {
return (T) Enum.Parse(typeof(T), itemName, true);
}
}
สิ่งนี้ยังไม่สนใจเคสและเป็นประโยชน์อย่างยิ่งสำหรับการวิเคราะห์คำตอบ REST-to กับ enum ของคุณเพื่อความปลอดภัยที่มากขึ้น หวังว่ามันจะช่วยให้ใครบางคน
C # ไม่อนุญาตให้ใช้วิธีการในการแจงนับเนื่องจากไม่ใช่หลักการที่ใช้ในคลาส แต่เป็นอาร์เรย์ 2 มิติที่มีสตริงและค่า
การใช้คลาสไม่ได้รับการสนับสนุนอย่างสูงจาก Microsoft ในกรณีนี้ให้ใช้ (data) struct (ures) แทน STRUCT มีจุดประสงค์เพื่อใช้เป็นคลาสแบบอ่อนสำหรับข้อมูลและตัวจัดการและสามารถจัดการฟังก์ชันได้อย่างดี C # และคอมไพเลอร์ไม่มีความสามารถในการติดตามและประสิทธิภาพตามที่ทราบจาก JAVA ซึ่งยิ่งมีการใช้คลาส / วิธีที่แน่นอนมากเท่าไหร่มันก็จะทำงานได้เร็วขึ้นและการใช้งานจะกลายเป็น 'คาดการณ์' C # ไม่มีสิ่งนั้นดังนั้นเพื่อแยกแยะใช้ STRUCT แทนที่จะเป็นคลาส