প্রতিবিম্বের মাধ্যমে একটি সর্বজনীন স্ট্যাটিক ক্ষেত্রের মান পান


90

আমি এ পর্যন্ত এটি করেছি:

 var fields = typeof (Settings.Lookup).GetFields();
 Console.WriteLine(fields[0].GetValue(Settings.Lookup)); 
         // Compile error, Class Name is not valid at this point

এবং এটি আমার স্থির শ্রেণি:

public static class Settings
{
   public static class Lookup
   {
      public static string F1 ="abc";
   }
}

10
কেবলমাত্র একটি নোট যে propsপরিবর্তিত পরিবর্তে কল fieldsকরা ভবিষ্যতের বিকাশকারীকে বিভ্রান্ত করার জন্য দায়বদ্ধ। সম্পত্তিগুলি তাদের নিজস্ব জিনিস এবং ক্ষেত্রগুলি অবশ্যই সেগুলি নয়।
— এরিক

উত্তর:


164

আপনি পাস প্রয়োজন nullথেকে GetValueযেহেতু এই ক্ষেত্রে কোনো দৃষ্টান্ত অন্তর্গত নয়:

props[0].GetValue(null)

4
একটি মাত্র প্যারামিটার নিয়ে ওভারলোড নেই? msdn.microsoft.com/en-us/library/...
— পাউলি Østerø

4
@ পাউলি: ভেরিয়েবলের নাম সত্ত্বেও, এটি ফিল্ডইনফো, প্রপার্টিইনফো নয়
— টমাস

19

আপনার টাইপ.গেটফিল্ড (সিস্টেম.রিফ্লেশন.বাইন্ডিং ফ্ল্যাশস) ওভারলোড ব্যবহার করতে হবে:

উদাহরণ স্বরূপ:

FieldInfo field = typeof(Settings.Lookup).GetField("Lookup", BindingFlags.Public | BindingFlags.Static);

Settings.Lookup lookup = (Settings.Lookup)field.GetValue(null);

7

স্বাক্ষর FieldInfo.GetValueহয়

public abstract Object GetValue(
    Object obj
)

objআপনি nullযদি কোনও স্থির শ্রেণীর কাছ থেকে মানটি পুনরুদ্ধার করতে চান তবে অবজেক্টের উদাহরণটি কোথায় । সুতরাং এটি করা উচিত:

var props = typeof (Settings.Lookup).GetFields();
Console.WriteLine(props[0].GetValue(null)); 

4
পরিবর্তনশীল নামগুলিতে বিশ্বাস করবেন না ... ওপি গেটফিল্ডগুলি কল করছে, গেটপোপার্টি নয়;)
— টমাস

@ পাওলিস্টার the দ্বিতীয়টির nullসাথে কী মিল রয়েছে ? FieldInfo.GetValueশুধুমাত্র একটি প্যারামিটার গ্রহণ করে না ? আমি ওভারলোডগুলি GetValueবা অন্য কোনও কিছুই সন্ধান করতে পারি না
— থমাস ফ্লিনকো

@ থমাস ফ্লিনকো কেবল টাইপো, এটি এখনই ঠিক করা হয়েছে
— পাওলি Øস্টারØ

@ পাওলিস্টার ø তাই ভেবেছিলেন :) ঠিক নিশ্চিত করতে চেয়েছিলেন যে প্রশ্নের কোডটি কপি-পেস্ট প্রস্তুত। একটি ভাল উত্তরের জন্য +1।
— থমাস ফ্লিনকো

4

এটা চেষ্টা কর

FieldInfo fieldInfo = typeof(Settings.Lookup).GetFields(BindingFlags.Static | BindingFlags.Public)[0];
    object value = fieldInfo.GetValue(null); // value = "abc"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.