বিবেচনা করার জন্য বেশ কয়েকটি পরিস্থিতি রয়েছে। প্রথমত, আপনাকে আপনার অবজেক্টের ধরণটি পরীক্ষা করতে হবে। আপনি কেবল এর জন্য getType () কল করতে পারেন। যদি টাইপটি IDynamicMetaObjectProvider বাস্তবায়ন না করে, তবে আপনি অন্য যে কোনও অবজেক্টের মতো প্রতিচ্ছবিটি ব্যবহার করতে পারেন। কিছুটা এইরকম:
var propertyInfo = test.GetType().GetProperties();
যাইহোক, IDynamicMetaObjectProvider বাস্তবায়নগুলির জন্য, সরল প্রতিবিম্ব কাজ করে না। মূলত, আপনাকে এই অবজেক্টটি সম্পর্কে আরও জানতে হবে। যদি এটি এক্সপেন্ডোঅবজেক্ট হয় (যা আইডিনামিকমেটাওজেক্টপ্রোভাডার বাস্তবায়নগুলির মধ্যে একটি), আপনি এটিউলসনের দেওয়া উত্তরটি ব্যবহার করতে পারেন। ExpandoObject এর অভিধানগুলিকে একটি অভিধানে সঞ্চয় করে এবং আপনি কেবল আপনার ডায়নামিক অবজেক্টটি কোনও অভিধানে কাস্ট করতে পারেন।
যদি এটি ডায়নামিকবজেক্ট (অন্য একটি আইডিনামিকমেটাওজেক্টপ্রোভাইডার বাস্তবায়ন) হয় তবে আপনার এই ডায়নামিকবজেক্টটি যে কোনও পদ্ধতি প্রকাশ করে তা আপনাকে ব্যবহার করতে হবে। ডায়নামিকবজেক্টকে এর সম্পত্তিগুলির তালিকা যে কোনও জায়গায় আসলে "স্টোর" করার দরকার নেই। উদাহরণস্বরূপ, এটি এর মতো কিছু করতে পারে (আমি আমার ব্লগ পোস্ট থেকে একটি উদাহরণ পুনরায় ব্যবহার করছি ):
public class SampleObject : DynamicObject
{
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = binder.Name;
return true;
}
}
এই ক্ষেত্রে, আপনি যখনই কোনও সম্পত্তি (কোনও প্রদত্ত নাম সহ) অ্যাক্সেস করার চেষ্টা করবেন তখন অবজেক্টটি কেবল স্ট্রিং হিসাবে সম্পত্তিটির নাম ফিরিয়ে দেয়।
dynamic obj = new SampleObject();
Console.WriteLine(obj.SampleProperty);
//Prints "SampleProperty".
সুতরাং, আপনার প্রতিফলিত করার মতো কিছু নেই - এই সামগ্রীর কোনও বৈশিষ্ট্য নেই এবং একই সাথে সমস্ত বৈধ সম্পত্তি নাম কাজ করবে work
আমি আইডিনামিকমেটাওজেক্টপ্রোভিডার বাস্তবায়নের জন্য বলব, আপনাকে পরিচিত রূপায়ণগুলিতে ফিল্টার করতে হবে যেখানে আপনি বৈশিষ্ট্যগুলির একটি তালিকা পেতে পারেন, যেমন ExpandoObject, এবং বাকিটির জন্য উপেক্ষা (বা একটি ব্যতিক্রম ছুঁড়ে)।