سؤال

هل من الممكن أن يقوم برنامج التحويل البرمجي تلقائيًا بتحويل قيم التعداد الخاصة بي إلى الأوتار حتى أتمكن من تجنب استدعاء طريقة tostring بشكل صريح في كل مرة. إليك مثال على ما أود القيام به:

enum Rank { A, B, C }

Rank myRank = Rank.A;
string myString = Rank.A; // Error: Cannot implicitly convert type 'Rank' to 'string'
string myString2 = Rank.A.ToString(); // OK: but is extra work
هل كانت مفيدة؟

المحلول

لا. التعداد هو نوعه الخاص ، إذا كنت ترغب في تحويله إلى شيء آخر ، فعليك القيام ببعض الأعمال.

ومع ذلك ، بناءً على ما تفعله به ، ستتصل ببعض المهام على ToString () عليها تلقائيًا لك. على سبيل المثال ، يمكنك القيام:

Console.Writeline(Rank.A);

نصائح أخرى

من المحتمل أنك لا تبحث عن التعدادات نفسها ، ولكن قائمة سلسلة ثابتة. يمكن أن تناسب احتياجاتك بشكل أفضل في بعض السيناريوهات.

استخدم هذا بدلاً من ذلك:

public static class Rank
{
   public const string A = "A";
   public const string B = "B";
   public const string C = "C";
}

لا ، ولكن على الأقل يمكنك القيام بالأشياء مع التعدادات التي ستتصل بها ToString() الطرق التي قد تحتاج فيها إلى استخدام قيمة السلسلة الخاصة بهم ، على سبيل المثال:

Console.WriteLine(Rank.A); //prints "A".

يجب أن يكون بناء الجملة الصحيح

myRank.ToString("F");

تحذير ، اختراق] غير متأكد من ما إذا كان هذا سيئًا ، يبدو لي أنه حل وسط معقول.

var myEnumAsString = MyEnum+""; Console.WriteLine(myEnumAsString); //MyEnum

هذا سوف يجبر tostring الضمني ()

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top