আপনি যেমন রেফারেন্স উত্সগুলিতে দেখতে পাচ্ছেন, নেমভেলিউ কালেকশনটি নেমোবজেক্টক্লিকেশনবেস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত ।
সুতরাং আপনি বেস-টাইপটি গ্রহণ করেন, প্রতিচ্ছবিটির মাধ্যমে ব্যক্তিগত হ্যাশটেবলটি পান এবং এতে কোনও নির্দিষ্ট কী রয়েছে কিনা তা পরীক্ষা করে দেখুন।
এটি মনোতেও কাজ করার জন্য, আপনাকে হ্যাশটবেলের নাম মনোতে কী আছে তা দেখতে হবে, এটি আপনি এখানে দেখতে পারেন (এম_আইটেমস কনটেনার), এবং মনো-ক্ষেত্র পাবেন, যদি প্রাথমিক ফিল্ডআইনফো নাল হয় (মনো - রানটাইম)।
এটার মত
public static class ParameterExtensions
{
private static System.Reflection.FieldInfo InitFieldInfo()
{
System.Type t = typeof(System.Collections.Specialized.NameObjectCollectionBase);
System.Reflection.FieldInfo fi = t.GetField("_entriesTable", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if(fi == null) // Mono
fi = t.GetField("m_ItemsContainer", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
return fi;
}
private static System.Reflection.FieldInfo m_fi = InitFieldInfo();
public static bool Contains(this System.Collections.Specialized.NameValueCollection nvc, string key)
{
//System.Collections.Specialized.NameValueCollection nvc = new System.Collections.Specialized.NameValueCollection();
//nvc.Add("hello", "world");
//nvc.Add("test", "case");
// The Hashtable is case-INsensitive
System.Collections.Hashtable ent = (System.Collections.Hashtable)m_fi.GetValue(nvc);
return ent.ContainsKey(key);
}
}
অতি-খাঁটি অ-প্রতিবিম্বিত। নেট 2.0 কোডের জন্য, আপনি হ্যাশ-টেবিলটি ব্যবহার না করে কীগুলি দিয়ে লুপ করতে পারেন, তবে এটি ধীরে ধীরে।
private static bool ContainsKey(System.Collections.Specialized.NameValueCollection nvc, string key)
{
foreach (string str in nvc.AllKeys)
{
if (System.StringComparer.InvariantCultureIgnoreCase.Equals(str, key))
return true;
}
return false;
}