বাইন্ডিংফ্ল্যাজস Typeঅনগরেস টাইপ.গেটপ্রপার্টি () এর জন্য কাজ করছে না?


183

নিম্নলিখিত কল্পনা করুন

একটি টাইপ টির একটি ফিল্ড কোম্পানি রয়েছে। নিম্নলিখিত পদ্ধতিটি কার্যকর করার সময় এটি নিখুঁতভাবে কাজ করে:

Type t = typeof(T);
t.GetProperty("Company")

নীচের কলটির সাথে যদিও আমি নালু হয়ে যাই

Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase)

কেউ ধারণা পেয়েছেন?


20
@ অরেগনগোস্ট: এতে কি কিছু আসে যায়?
লেপি

9
যদিও আপনার মেটা প্রশ্নটি বৈধ, সত্যিকার অর্থে এটি গুরুত্বপূর্ণ নয়। আমার বেশিরভাগ প্রশ্ন হিসাবে, আমার প্রাথমিক কারণ হ'ল জ্ঞানের ক্ষুধা;)
বোরিস কলেনস

1
@ লেপি: হ্যাঁ, তা হয়। সম্ভবত এটির জন্য একটি ব্যবহারের কেস রয়েছে যা সম্পর্কে আমি অবগত নই এবং লোকেরা কেন কাজ করতে চায় তা সবসময়ই আকর্ষণীয়।
অরেগনহোস্ট

21
@ অরেগনগোস্ট: সমস্ত ভাষাগুলি লক্ষ্যবস্তু নয় et নেট কেস সংবেদনশীল, এজন্য আপনাকে কিছু সময় সংবেদনশীল চেহারা দেখাতে হবে।
পপ ক্যাটালিন

2
আমার জন্য কেস ব্যবহার করুন: সুতরাং আমি ক্ষেত্রগুলি কীভাবে টাইপ করেছি তা চিন্তা না করে আমি কোনও এমএসএসকিউএল কমপ্যাক্ট সত্তার বিরুদ্ধে বস্তুগুলির তুলনা করতে পারি। (আমি কোনও কমপ্যাক্ট ডাটাবেসের সাথে একটি বস্তুর তুলনা করছি যেখানে কিছু ক্ষেত্রের নাম হ'ল সামোথিং এবং ইসসোমিং।) অন্য কথায়, অলসতার জন্য।
টায়নন

উত্তর:


389

আপনি ডিফল্ট লুক আপগুলি ওভাররাইট করেছেন, আপনি যদি নতুন পতাকা নির্দিষ্ট করেন তবে আপনাকে সমস্ত তথ্য সরবরাহ করতে হবে যাতে সম্পত্তিটি পাওয়া যায়। উদাহরণ স্বরূপ:BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance


7
এটি কেন এমন (কারও কাছে জ্ঞানের জন্য জিজ্ঞাসা করা;) এর কোনও ধারণা আছে
শ্রীবল্লভ

2
টুইটারে বাইন্ডিংফ্ল্যাজস n ইনস্ট্যান্সটি ডিফল্ট পতাকা হয় যখন আপনি কেবল সম্পত্তির নাম সরবরাহ করেন
ওতাবেক খোলিকভ

1
@ শ্রীভল্লভ ওতাবেকখোলিকভের ব্যাখ্যায় যুক্ত করে, যদি এই ডিফল্টগুলি রাখা হয় এবং আপনার নির্দিষ্ট BindingFlagsকরা (ওআর) তাদের সাথে যুক্ত করা হয়, তবে ডিফল্টগুলি ব্যবহার না করার উপায় থাকত না। অর্থাৎ Publicবৈশিষ্ট্যগুলি বাদ দেওয়া বা সম্পত্তিগুলি বাদ দেওয়া সম্ভব হবে না Instance। তারা সিদ্ধান্ত নিয়েছে যে আপনি হয় ডিফল্ট গ্রহণ করেন, বা আপনি ঠিক কী পরে তা নির্দিষ্ট করে তাদের ওভাররাইড করে।
xr280xr

36

আপনি যোগ করা প্রয়োজন BindingFlags.Public | BindingFlags.Instance


2
আপনি কম ভোট পেয়েছেন, তবে আপনি 2 মিনিট দ্রুত ছিলেন - তবে আবার, পপের উত্তরে আরও বিশদ ছিল। আমি প্রাপ্য সবাইকে ভোট দিই! :)
টনি বাসালো 15

10

ধন্যবাদ, এটি আজ আমাকে একটি চিম্টিতে সত্যিই সাহায্য করেছে। আমার অডিট তথ্য সংরক্ষণ করা ছিল, কিন্তু সম্পত্তি নামের ভুল আবরণ দিয়ে। (নিরীক্ষণটি একটি ডেটালেয়ার হিসাবে নির্মিত) ফলাফল ফাংশন:

public static void SetProperty(Object R, string propertyName, object value)
{
    Type type = R.GetType();
    object result;
    result = type.InvokeMember(
        propertyName, 
        BindingFlags.SetProperty | 
        BindingFlags.IgnoreCase | 
        BindingFlags.Public | 
        BindingFlags.Instance, 
        null, 
        R, 
        new object[] { value });
}

এটি ক্লাসের অংশ যা আমি ডটম্যাগিক বলে।

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