PDA

View Full Version : سرچ در کالکشن



businessMg
دوشنبه 12 اسفند 1392, 16:24 عصر
سلام.
من تابع زیر رو برای خوندن مقدار یه key در دیکشنری نوشتم:

public int? GetValueOfNullableIntTypeKeyInDictionary(Dictionar y<string, object> dictionary,
string key)
{
object value;
if (dictionary.TryGetValue(key,out value) && value!=null)
{
return (int?)value;
}
return null ;
}

مشکلم اینه که تو شرط if اگه مقدار value نال باشه exception رخ میده. چظور باید درستش کنم؟

من یه تابع برای int? نوشتم یه تابع برای string و ....

آیا میشه یه تابع بنویسم که برای همه ی trpe های داده استفاده بشه؟

resident
دوشنبه 12 اسفند 1392, 22:07 عصر
به دلیل اینکه سرعت TryGetValue از contains بالاتره میخوام از TryGetValue استفاده کنم

plus
سه شنبه 13 اسفند 1392, 03:05 صبح
شما میتونی یک Generic Exetension Method برای این کار به این صورت بنویسی:

public static class DictionaryExtensions
{
public static TValue GetValueOrDefault<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key)
{
TValue value;
if (dictionary.TryGetValue(key, out value))
return value;

return default(TValue);
}
}

و بعد اینطوری ازش استفاده کنی:

Dictionary<string, int?> myDictionary = new Dictionary<string, int?>();
myDictionary.Add("First", 12);
int? firstValue = myDictionary.GetValueOrDefault("First");
int? undefinedValue = myDictionary.GetValueOrDefault("Hello");

اینطوری نه به نوع کلید و نه به نوع مقدار وابسته نیستید.