সি # তে স্ট্রিং থেকে এনাম মান কীভাবে পাবেন?


102

আমার একটি এনাম আছে:

public enum baseKey : uint
{  
    HKEY_CLASSES_ROOT = 0x80000000,
    HKEY_CURRENT_USER = 0x80000001,
    HKEY_LOCAL_MACHINE = 0x80000002,
    HKEY_USERS = 0x80000003,
    HKEY_CURRENT_CONFIG = 0x80000005
}

আমি কীভাবে স্ট্রিং দিয়ে এনামের উপর ভিত্তি করে HKEY_LOCAL_MACHINEএকটি মান পেতে 0x80000002পারি?

উত্তর:


173
baseKey choice;
if (Enum.TryParse("HKEY_LOCAL_MACHINE", out choice)) {
     uint value = (uint)choice;

     // `value` is what you're looking for

} else { /* error: the string was not an enum member */ }

.NET 4.5 এর আগে আপনাকে নিম্নলিখিতটি করতে হয়েছিল যা আরও ত্রুটি-প্রবণ এবং একটি অবৈধ স্ট্রিং পাস হয়ে গেলে একটি ব্যতিক্রম ছুঁড়ে ফেলে:

(uint)Enum.Parse(typeof(baseKey), "HKEY_LOCAL_MACHINE")

1
আমি সবসময় ভাবছি কেন এখনও এনাম.পার্সে জেনেরিক ওভারলোড নেই। এটা অনেক বিলম্ব।
ফ্যালানওয়ে

3
এখন জেনেরিক এনাম রয়েছে ry ট্রাইপার্স <টি এনাম> () পদ্ধতি।
ইউজিন মাকসিমভ

27

এনাম.ট্রি পার্স ব্যবহার করে আপনার ব্যতিক্রম হ্যান্ডলিংয়ের দরকার নেই:

baseKey e;

if ( Enum.TryParse(s, out e) )
{
 ...
}



1
var value = (uint)Enum.Parse(typeof(basekey), "HKEY_LOCAL_MACHINE", true);

এই কোড স্নিপেট একটি স্ট্রিং থেকে একটি এনাম মান অর্জনের চিত্রিত করে। একটি স্ট্রিং থেকে রূপান্তর করতে, আপনাকে স্থির Enum.Parse()পদ্ধতিটি ব্যবহার করতে হবে , যা 3 পরামিতি নেয়। প্রথমটি হ'ল এনামের ধরণটি আপনি বিবেচনা করতে চান। সিনট্যাক্স হল typeof()ব্রাউকেটে এনাম ক্লাসের নাম অনুসারে মূল শব্দটি। দ্বিতীয় প্যারামিটারটি রূপান্তরিত হওয়ার স্ট্রিং এবং তৃতীয় প্যারামিটারটি এটি boolনির্দেশ করে যা রূপান্তরটি করার সময় আপনার কেসটি উপেক্ষা করা উচিত।

অবশেষে, দয়া করে মনে রাখবেন Enum.Parse()আসলে একটি বস্তু রেফারেন্স, মানে আপনি স্পষ্টভাবে প্রয়োজনীয় enum প্রকার (রূপান্তর করার জন্য প্রয়োজন ফেরৎ string, intইত্যাদি)।

ধন্যবাদ.


-2

বিকল্প সমাধান হতে পারে:

baseKey hKeyLocalMachine = baseKey.HKEY_LOCAL_MACHINE;
uint value = (uint)hKeyLocalMachine;

বা শুধু:

uint value = (uint)baseKey.HKEY_LOCAL_MACHINE;

3
কিভাবে সঠিকভাবে একটি স্ট্রিং এনাম মান রূপান্তর করতে পারে?
ফ্যালানওয়ে

এনামগুলিতে দুটি উপাদান থাকে: নাম এবং মান। ধরা যাক নামটি "HKEY_LOCAL_MACHINE" এবং মানটি "0x80000002"। এনাম.পার্স () পদ্ধতিটি এক্ষেত্রে অকেজো কারণ আপনি এনাম সদস্যকে ইউন্ট করতে পারেন এবং মান পেতে পারেন - 2147483650. অবশ্যই এনাম. পার্স () অবশ্যই একই ফলাফল দেয় তবে পরামিতি হিসাবে স্ট্রিংকে হার্ডকডিংয়ের পরিবর্তে আপনি কাস্ট করতে পারেন আপনার সাথে কাজ করছেন সরাসরি এনাম ভেরিয়েবল directly
জর্জ Findulov

4
আপনি ও স্ট্রিংকে মানটিতে রূপান্তর করেননি "HKEY_LOCAL_MACHINE", যেমনটি ওপি জিজ্ঞাসা করেছিল, আপনি প্রতীকটিকে মানটিতে রূপান্তর করেছেন HKEY_LOCAL_MACHINE। বন্যভাবে বিভিন্ন জন্তু।
ফালানওয়ে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.