আমার যদি একটি Dictionary<String,...>থাকে তবে ContainsKeyকেস-সংবেদনশীলদের মতো পদ্ধতি তৈরি করা সম্ভব ?
এটি সম্পর্কিত বলে মনে হয়েছিল, তবে আমি এটি সঠিকভাবে বুঝতে পারি নি: সি # অভিধান: ঘোষণার মাধ্যমে কী কেস-সংবেদনশীল তৈরি করা
আমার যদি একটি Dictionary<String,...>থাকে তবে ContainsKeyকেস-সংবেদনশীলদের মতো পদ্ধতি তৈরি করা সম্ভব ?
এটি সম্পর্কিত বলে মনে হয়েছিল, তবে আমি এটি সঠিকভাবে বুঝতে পারি নি: সি # অভিধান: ঘোষণার মাধ্যমে কী কেস-সংবেদনশীল তৈরি করা
উত্তর:
এটি সম্পর্কিত বলে মনে হয়েছিল, তবে আমি এটি সঠিকভাবে বুঝতে পারি নি: সি # অভিধান: ঘোষণার মাধ্যমে কী কেস-সংবেদনশীল তৈরি করা
এটা আসলে সম্পর্কিত। সমাধানটি হ'ল ডিকোশনারি উদাহরণটি স্ট্যান্ডার্ড স্ট্রিং তুলনা পদ্ধতিটি (যা কেস সংবেদনশীল) ব্যবহার না করে বরং কেস সংবেদনশীল একটি ব্যবহার করার জন্য বলে। এটি উপযুক্ত নির্মাতা ব্যবহার করে করা হয় :
var dict = new Dictionary<string, YourClass>(
StringComparer.InvariantCultureIgnoreCase);
কনস্ট্রাক্টর এমন একটি প্রত্যাশা করে IEqualityComparerযা কীভাবে কীগুলি কীভাবে তুলনা করতে হয় তার অভিধানকে বলে।
StringComparer.InvariantCultureIgnoreCaseআপনাকে একটি IEqualityComparerউদাহরণ দেয় যা কেস-সংবেদনশীল পদ্ধতিতে স্ট্রিংগুলির সাথে তুলনা করে।
var myDic = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
myDic.Add("HeLlo", "hi");
if (myDic.ContainsKey("hello"))
Console.WriteLine(myDic["hello"]);
আপনার অভিধানের সাথে ডিলের সম্ভাবনা রয়েছে যা 3 য় পক্ষ বা বাহ্যিক dll থেকে টানা হয়েছে few লিনাক ব্যবহার করে
YourDictionary.Any(i => i.KeyName.ToLower().Contains("yourstring")))
Anyকরতে SingleOrDefaultআপনি পাবেন না nullযদি এটা কোন অস্তিত্ব নেই পিছনে, এর পরিবর্তে আপনি উভয় কী এবং মান সেট দিয়ে একটি keyvaluepair পাবেন null!
Containsআপনি যে সময়ে সেই সময়ে কাজ করছিলেন এমন কোনও কিছুকে ব্যবহারের ক্ষেত্রে খুব সুনির্দিষ্ট মনে হয়। আরও জেনেরিক সহায়ক উত্তর হিসাবে, আমি মনে করি Equalsএটি আরও ভাল। এবং সেই একই নোটে, স্ট্রিংটির সাথে সদৃশ করার পরিবর্তে ToLower()এটি ব্যবহার করা আরও ভাল StringComparison.xxxCase।
dict.Keys.Contains("bla", appropriate comparer)সহজতার জন্য লিনকিউ ওভারলোড ব্যবহার করুন।
আমি ঠিক একই ধরণের সমস্যায় পড়েছি যেখানে আমার একটি এএসপি.নেট কোর নিয়ামকের ক্ষেত্রে সংবেদনশীল অভিধানের দরকার পড়ে।
আমি একটি এক্সটেনশন পদ্ধতি লিখেছি যা কৌশলটি করে। অন্যদের জন্যও এটি সহায়ক হতে পারে ...
public static IDictionary<string, TValue> ConvertToCaseInSensitive<TValue>(this IDictionary<string, TValue> dictionary)
{
var resultDictionary = new Dictionary<string, TValue>(StringComparer.InvariantCultureIgnoreCase);
foreach (var (key, value) in dictionary)
{
resultDictionary.Add(key, value);
}
dictionary = resultDictionary;
return dictionary;
}
এক্সটেনশন পদ্ধতিটি ব্যবহার করতে:
myDictionary.ConvertToCaseInSensitive();
তারপরে অভিধান থেকে একটি মান পান:
myDictionary.ContainsKey("TheKeyWhichIsNotCaseSensitiveAnymore!");
উদাহরণস্বরূপ তৈরিতে যদি আপনার কোনও নিয়ন্ত্রণ না থাকে, তবে আপনাকে বলুন যে আপনার বস্তুটি জেসন ইত্যাদি থেকে বিচ্ছিন্ন হয়েছে, আপনি একটি মোড়ক শ্রেণি তৈরি করতে পারেন যা অভিধান শ্রেণি থেকে উত্তরাধিকার সূত্রে প্রাপ্ত।
public class CaseInSensitiveDictionary<TValue> : Dictionary<string, TValue>
{
public CaseInSensitiveDictionary() : base(StringComparer.OrdinalIgnoreCase){}
}
StringComparer.InvariantCultureIgnoreCase? এটি যা বলেছে তা করে ...