আপনারা যারা সি ++ এর সাথে পরিচিত তাদের জন্য আমি একটি এসটিএল মানচিত্রের মতো আচরণের সাথে একটি আইডিকোরিয়ালি তৈরি করতে এনক্যাপসুলেশন ব্যবহার করেছি । যারা নেই তাদের জন্য:
- সূচক নীচের সেফড অভিধানে {get পান কোনও কী উপস্থিত না থাকলে ডিফল্ট মান প্রদান করে এবং সেই কীটি একটি ডিফল্ট মান সহ অভিধানে যোগ করে। এটি প্রায়শই পছন্দসই আচরণ, কারণ আপনি এমন আইটেম সন্ধান করছেন যা শেষ পর্যন্ত প্রদর্শিত হবে বা প্রদর্শিত হওয়ার ভাল সুযোগ থাকবে।
- পদ্ধতি অ্যাড (টি কে কী, টিভি ভাল) একটি অ্যাডআরআপডেট পদ্ধতি হিসাবে আচরণ করে, উপস্থিত মানটি নিক্ষেপের পরিবর্তে উপস্থিত থাকলে প্রতিস্থাপন করে। আমি কেন দেখতে পাচ্ছি না কেন মি an এর একটি অ্যাডআরআপডেট পদ্ধতি নেই এবং খুব সাধারণ পরিস্থিতিতে ত্রুটি নিক্ষেপ করা ভাল ধারণা বলে আমি মনে করি।
টিএল / ডিআর - নিরাপদ অভিধানটি এমনভাবে লেখা হয় যাতে কখনও বিকৃত পরিস্থিতি ব্যতীত কোনও পরিস্থিতিতে ব্যতিক্রম না ছুঁতে পারে , যেমন যেমন কম্পিউটার স্মৃতি থেকে বেরিয়ে আসে (বা আগুনে থাকে)এটি AddOrUpdate আচরণের সাথে অ্যাডকে প্রতিস্থাপন করে এবং সূচক থেকে নটফাউন্ডএক্সসেপশন নিক্ষেপের পরিবর্তে ডিফল্ট ফিরে আসে।
কোডটি এখানে:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class SafeDictionary<TK, TD>: IDictionary<TK, TD> {
Dictionary<TK, TD> _underlying = new Dictionary<TK, TD>();
public ICollection<TK> Keys => _underlying.Keys;
public ICollection<TD> Values => _underlying.Values;
public int Count => _underlying.Count;
public bool IsReadOnly => false;
public TD this[TK index] {
get {
TD data;
if (_underlying.TryGetValue(index, out data)) {
return data;
}
_underlying[index] = default(TD);
return default(TD);
}
set {
_underlying[index] = value;
}
}
public void CopyTo(KeyValuePair<TK, TD>[] array, int arrayIndex) {
Array.Copy(_underlying.ToArray(), 0, array, arrayIndex,
Math.Min(array.Length - arrayIndex, _underlying.Count));
}
public void Add(TK key, TD value) {
_underlying[key] = value;
}
public void Add(KeyValuePair<TK, TD> item) {
_underlying[item.Key] = item.Value;
}
public void Clear() {
_underlying.Clear();
}
public bool Contains(KeyValuePair<TK, TD> item) {
return _underlying.Contains(item);
}
public bool ContainsKey(TK key) {
return _underlying.ContainsKey(key);
}
public IEnumerator<KeyValuePair<TK, TD>> GetEnumerator() {
return _underlying.GetEnumerator();
}
public bool Remove(TK key) {
return _underlying.Remove(key);
}
public bool Remove(KeyValuePair<TK, TD> item) {
return _underlying.Remove(item.Key);
}
public bool TryGetValue(TK key, out TD value) {
return _underlying.TryGetValue(key, out value);
}
IEnumerator IEnumerable.GetEnumerator() {
return _underlying.GetEnumerator();
}
}