সি # তে কীভাবে নিজস্ব গতিশীল প্রকার বা গতিশীল অবজেক্ট তৈরি করবেন?


130

উদাহরণস্বরূপ, শ্রেণিবর্গের ভিউব্যাগ সম্পত্তি রয়েছে ControllerBaseএবং আমরা এই বস্তুটিতে গতিশীলভাবে মানগুলি সেট / মান নির্ধারণ করতে এবং অতিরিক্ত ক্ষেত্র বা বৈশিষ্ট্যগুলি সংযোজন করতে পারি, এটি দুর্দান্ত। আমি এমভিসি অ্যাপ্লিকেশন এবং Controllerক্লাসের বাইরে অন্য কিছু ব্যবহার করতে চাই অ্যাপ্লিকেশন ধরণের। যখন আমি গতিশীল অবজেক্ট তৈরি করার চেষ্টা করেছি এবং নীচের মতো এটির সম্পত্তি সেট করেছি:

1. dynamic MyDynamic = new { A="a" };
2. MyDynamic.A = "asd";
3. Console.WriteLine(MyDynamic.A);

আমি সম্পত্তি বা সূচক '<> f__ অজ্ঞাতনামা টাইপ0.এ'RuntimeBinderException বার্তাটি পেয়েছি - এটি কেবল ২ লাইনেই পড়া হয় Also এছাড়াও আমি পরামর্শ দিচ্ছি যে এটি আমি যা খুঁজছি তা ঠিক নয়। সম্ভবত এমন কিছু শ্রেণি রয়েছে যা আমাকে কিছু করার অনুমতি দিতে পারে:

??? MyDynamic = new ???();
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = DateTime.Now;
MyDynamic.TheAnswerToLifeTheUniverseAndEverything = 42;

গতিশীল যুক্ত এবং বৈশিষ্ট্য নির্ধারণ সহ।

উত্তর:


279
dynamic MyDynamic = new System.Dynamic.ExpandoObject();
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = "C";
MyDynamic.Number = 12;
MyDynamic.MyMethod = new Func<int>(() => 
{ 
    return 55; 
});
Console.WriteLine(MyDynamic.MyMethod());

ExpandoObject বর্গ সম্পর্কে আরও পড়ুন এবং আরও নমুনাগুলির জন্য: এমন একটি বিষয় প্রতিনিধিত্ব করে যার সদস্যদের সঞ্চালনের সময় গতিশীলভাবে যুক্ত এবং সরানো যেতে পারে।


3
ভিসুয়াল স্টুডিও মধ্যে এই বৈশিষ্ট্যের জন্য ভোট করুন UserVoice
ওরাড

33

সম্প্রতি আমার এই আরও একধাপ এগিয়ে নেওয়া দরকার ছিল, যা ছিল ব্যবহারকারী সংজ্ঞায়িত এন্ট্রিগুলির উপর ভিত্তি করে গতিশীল অবজেক্টে সম্পত্তি যুক্ত করা, গতিশীল। মাইক্রোসফ্টের এক্সপেন্ডোঅবজেক্ট ডকুমেন্টেশন থেকে এখানে উদাহরণস্বরূপ , বিশেষভাবে সংযোজন সম্পর্কিত বৈশিষ্ট্যগুলিকে নির্দিষ্টভাবে সম্বোধন করা হয় না, তবে আপনি কীভাবে সম্পত্তি গণনা ও মুছবেন তা থেকে সমাধান করা যেতে পারে। যাইহোক, আমি ভেবেছিলাম এটি কারও পক্ষে সহায়ক হতে পারে। কীভাবে একটি এক্সপ্যান্ডোঅবজেক্টে কীওয়ার্ড এবং অন্যান্য হ্যান্ডলিং উপেক্ষা করে সত্যিকারের গতিশীল বৈশিষ্ট্য যুক্ত করা যায় তার একটি অত্যন্ত সরল সংস্করণ এখানে:

        // my pretend dataset
        List<string> fields = new List<string>();
        // my 'columns'
        fields.Add("this_thing");
        fields.Add("that_thing");
        fields.Add("the_other");

        dynamic exo = new System.Dynamic.ExpandoObject();

        foreach (string field in fields)
        {
            ((IDictionary<String, Object>)exo).Add(field, field + "_data");
        }

        // output - from Json.Net NuGet package
        textBox1.Text = Newtonsoft.Json.JsonConvert.SerializeObject(exo);

32

ExpandoObject আপনি কি খুঁজছেন হয়

dynamic MyDynamic = new ExpandoObject(); // note, the type MUST be dynamic to use dynamic invoking.
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = "C";
MyDynamic.TheAnswerToLifeTheUniverseAndEverything = 42;

11

ExpandoObject Classযেটি System.Dynamicনেমস্পেসে রয়েছে আপনি তা ব্যবহার করতে পারেন ।

dynamic MyDynamic = new ExpandoObject();
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = "C";
MyDynamic.SomeProperty = SomeValue
MyDynamic.number = 10;
MyDynamic.Increment = (Action)(() => { MyDynamic.number++; });

আরও তথ্য এক্সপেন্ডোঅবজেক্ট এমএসডিএন- তে পাওয়া যাবে




7
 var data = new { studentId = 1, StudentName = "abc" };  

বা মান উপস্থিত

  var data = new { studentId, StudentName };
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.