মান থেকে স্ট্রিংয়ের নাম এনুম


407

আমার কাছে এনিম নির্মাণ রয়েছে:

public enum EnumDisplayStatus
{
    None    = 1,
    Visible = 2,
    Hidden  = 3,
    MarkedForDeletion = 4
}

আমার ডাটাবেসে, গণনাগুলি মান দ্বারা উল্লেখ করা হয়। আমার প্রশ্নটি হল, আমি এনামের নম্বর উপস্থাপনাটিকে স্ট্রিংয়ের নামটিতে কীভাবে ফিরিয়ে আনব।

উদাহরণস্বরূপ, দেওয়া 2ফলাফল হওয়া উচিত Visible


25
আমি বিশ্বাস করি, এখন ভিএস 2015 এর সাথে nameof(EnumDisplayStatus.Visible)এটি করার আরও সহজ উপায় রয়েছে আশা করি এটি কারও সাহায্য করবে
গ্যাব্রিয়েল মারিয়াস পোপেস্কু

উত্তর:


542

আপনি intসাধারণ কাস্টের সাহায্যে পিছনে একটি গণনা সদস্যে রূপান্তর করতে পারেন এবং তারপরে কল করতে পারেন ToString():

int value = GetValueFromDb();
var enumDisplayStatus = (EnumDisplayStatus)value;
string stringValue = enumDisplayStatus.ToString();

13
আপডেট: আইফরম্যাটপ্রোভাইডার ব্যবহার করে কেবলমাত্র কিছু ওভারলোডগুলি হ্রাস করা হয়। টোস্ট্রিং () ঠিক আছে। গ্রুপ. google.com/group/DotNetDevelopment/browse_thread/thread/…
অ্যান্ডিএম

ক্ষেত্রে আচরণ কি enum Foo { A = 1, B= 1 }?
dbkk

3
@dbkk ডকুমেন্টেশনে উল্লেখ করা হয়েছে যে enums এর সাথে "আপনার কোডটি কোন স্ট্রিংটি ফিরে আসবে সে সম্পর্কে কোনও অনুমান করা উচিত নয়।" কারণ আপনি সুনির্দিষ্ট পরিস্থিতিতে। দেখতে msdn.microsoft.com/en-us/library/16c1xs4z.aspx
পল ডি Ambra,

4
একটি uptodated সমাধান: msdn.microsoft.com/en-us/library/...
জ্যাক

4
সংক্ষিপ্ত: var স্ট্রিংভ্যালু = ((EnumDisplayStatus) মান)। টুস্ট্রিং ()
redwards510

188

উদাহরণ "Visible"না পেয়ে যদি আপনার স্ট্রিংয়ের দরকার হয় তবে আপনি এটি EnumDisplayStatusকরতে পারেন:

int dbValue = GetDBValue();
string stringValue = Enum.GetName(typeof(EnumDisplayStatus), dbValue);

5
ম্যান্ডোলিনের উত্তর সম্পর্কে যদি আপনার একটি ভুল হয় তবে: এনাম.গেটনাম একটি স্ট্রিং দেয়,
এনুম

এটি কি প্রতিবিম্ব ব্যবহার করে বা সংকলক পর্দার পিছনে ব্যবহারের জন্য একটি সহায়ক অভিধান তৈরি করে?
পালসুইম

155

এটা চেষ্টা কর:

string m = Enum.GetName(typeof(MyEnumClass), value);

@ নীলকো এই উত্তরটি ভাল, তবে আমি কেন্টদের উত্তরকে পছন্দ করি, মূলত কারণ আমার এনামগুলিতে "বিবরণ" আমার একটি কাস্টম বৈশিষ্ট্য রয়েছে তবে বিবরণটি পেতে আমার একটি এনাম এক্সটেনশন রয়েছে - এটি ব্যবহারকারীর জন্য স্ক্রিনে প্রদর্শন করার জন্য।
হারাগ

60

এটা ব্যবহার কর:

string bob = nameof(EnumDisplayStatus.Visible);

9
যদিও সি # 6+ প্রয়োজন।
আদম কে ডিন

10
@ এজেডচ্যাড এটি জানার জন্য একটি দুর্দান্ত জিনিস, অবশ্যই; তবে এটি ওপি-র দৃশ্যে সত্যিই প্রযোজ্য নয় , যেহেতু মানগুলি একটি ডাটাবেস থেকে আসে (সুতরাং: রানটাইম, সংকলন-সময় নয়, মান)
মার্ক গ্রাভেল

22

আপনি এটি কাস্ট করতে পারেন

int dbValue = 2;
EnumDisplayStatus enumValue = (EnumDisplayStatus)dbValue;
string stringName = enumValue.ToString(); //Visible

আহ .. কেন্ট আমাকে এটি মারল :)


এখন কেন্ট সমস্ত "প্রথম উত্তর" খ্যাতি পান। চমৎকার ওয়ান্ট কেন্ট! : পি
ম্যাট কোকাজ

12

ডিবি থেকে সি #

EnumDisplayStatus status = (EnumDisplayStatus)int.Parse(GetValueFromDb());

সি # থেকে ডিবি

string dbStatus = ((int)status).ToString();

12

সমাধান:

int enumValue = 2; // The value for which you want to get string 
string enumName = Enum.GetName(typeof(EnumDisplayStatus), enumValue);

এছাড়াও, এনামের সুস্পষ্ট কাস্টিংয়ের চেয়ে গেটনাম ব্যবহার করা ভাল ।

[পারফরম্যান্স বেঞ্চমার্কের জন্য কোড]

Stopwatch sw = new Stopwatch (); sw.Start (); sw.Stop (); sw.Reset ();
double sum = 0;
int n = 1000;
Console.WriteLine ("\nGetName method way:");
for (int i = 0; i < n; i++) {
   sw.Start ();
   string t = Enum.GetName (typeof (Roles), roleValue);
   sw.Stop ();
   sum += sw.Elapsed.TotalMilliseconds;
   sw.Reset ();
}
Console.WriteLine ($"Average of {n} runs using Getname method casting way: {sum / n}");
Console.WriteLine ("\nExplicit casting way:");
for (int i = 0; i < n; i++) {
   sw.Start ();
   string t = ((Roles)roleValue).ToString ();
   sw.Stop ();
   sum += sw.Elapsed.TotalMilliseconds;
   sw.Reset ();
}
Console.WriteLine ($"Average of {n} runs using Explicit casting way: {sum / n}");

[নমুনা ফলাফল]

GetName method way:
Average of 1000 runs using Getname method casting way: 0.000186899999999998
Explicit casting way:
Average of 1000 runs using Explicit casting way: 0.000627900000000002

2
এটি একটি 7 বছরের পুরানো উত্তরের অনুলিপি। আপনি কেন ব্যাখ্যা করতে পারেন যে আপনারগুলির আসলটির চেয়ে ভাল কেন?
নভেম্বরের

@ এনভয়েগ্ট কারণ, আমি যদি সঠিক হয়ে থাকি তবে এনামের টোস্ট্রিং () এপিআই এখন অপ্রচলিত। [ ডকস.মাইক্রোসফট.ইন- ইউএস
নবীন কুমার ভি

সুতরাং ... কমপক্ষে আরও দুটি উত্তর ইতিমধ্যে আপনার পোস্ট করা কোড সরবরাহ করে। ম্যান্ডোলিন বা অ্যালগ্রেট থেকে আপনার কী সরবরাহ করে?
নভে

@nvoigt তারা সুস্পষ্ট কাস্টিংয়ের সাথে তুলনা করে এর অভিনয় সম্পর্কে উল্লেখ করেনি mention আমার উত্তরটি পছন্দ করার জন্য এটি কি আপনার পক্ষে যথেষ্ট? : p যাইহোক ধন্যবাদ, আমি আশা করি এটি কাউকে সাহায্য করবে। :)
নবীন কুমার ভি

আমাদের মনে হয় কোনও যোগাযোগের সমস্যা আছে। আপনি কি কোনও মোবাইল ডিভাইসে রয়েছেন বা সম্ভবত আপনি এতদূর নিচে স্ক্রোল করেননি? 7 বছর আগে থেকে আপনার উত্তরের দুটি সঠিক কপি রয়েছে cop আমি উত্তরদাতাদের নাম দিয়েছি, সুতরাং তাদের সন্ধান করা সহজ হওয়া উচিত। আপনার উত্তরটি এমন কী সরবরাহ করে যা এখানে কমপক্ষে 7 বছর ধরে এখানে নেই?
নভে

9

nameof এক্সপ্রেশন ব্যবহার করে দ্রুততম, সংকলনের সময় সমাধান ।

এনামের আক্ষরিক ফিরিয়ে দেয়।

public enum MyEnum {
    CSV,
    Excel
}


string enumAsString = nameof(MyEnum.CSV)
// enumAsString = "CSV"

বিঃদ্রঃ:

  • আপনি পুরো বড় হাতের একটি এনামের নাম রাখতে চাইবেন না, তবে কেস-সংবেদনশীলতার পরিচয় দিতেন nameof

এটি একটি উত্তর করা উচিত ছিল।
লিনপি ফ্যান

@ লিনপাইফান খুশী এটি ভালভাবে কাজ করে! ওপি তারিখের তুলনায় এটি তুলনামূলকভাবে নতুন।
রীপ

4

কেবল দরকার:

string stringName = EnumDisplayStatus.Visible.ToString("f");
// stringName == "Visible"

1
বেশিরভাগ ক্ষেত্রে, এটি 10 ​​বছর আগে থেকে শীর্ষ উত্তরের সাথে প্রায় একই রকম; যোগে "f"সুনির্দিষ্টভাবে উল্লেখ করা nuanced হয়, এবং হতে পারে অথবা নাও হতে পারে কি আহ্বানকারী চায় (এটা নির্ভর করে: কি করতে চান তারা): docs.microsoft.com/en-us/dotnet/standard/base-types/...
মার্ক Gravell

আমি তারিখ আহের দিকে মনোযোগ দিলাম না। আমি মনে করি এটির মতো পুরানো সমাধানটি কিছুটা আপডেট করা ভাল। আমি এই পৃষ্ঠাটি খোলার সর্বশেষ ব্যক্তি হব না। এবং আপনার নির্ভুলতার জন্য ধন্যবাদ! :)
Al3x_M

3

স্ট্রিংয়ের মান [নাম] পাওয়ার জন্য:

EnumDisplayStatus enumDisplayStatus = (EnumDisplayStatus)GetDBValue();
string stringValue = $"{enumDisplayStatus:G}"; 

এবং এনাম মান পাওয়ার জন্য:

string stringValue = $"{enumDisplayStatus:D}";
SetDBValue(Convert.ToInt32(stringValue ));

কেন শুধু .ToString ()? 'ফেসপাম'
মেটিটাস

3

আমি নীচে দেওয়া এই কোডটি ব্যবহার করেছি

 CustomerType = ((EnumCustomerType)(cus.CustomerType)).ToString()

1

কেবল গণনার প্রকারের জন্য প্রেরণ করুন:

EnumDisplayStatus status = (EnumDisplayStatus) statusFromDatabase;
string statusString = status.ToString();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.