泛型的應用無處不在,下面是專案**片斷,比較典型的泛型與反射應用,提供了型別安全.場景是專案中有基於exchange訪問,使用了exchange web services manage api,我們需要寫乙個輔助查詢的enum屬性類,以dictionary的方式,enum型別對key,string型別為value.最後轉換成manage api中具體查詢類.
public enumcontactqueryenum
好的,下面是轉換方法:
/// ///
gets the ews's entity property auto conver to dictionary.
///
///
first dictionary key
///
second dictionary key
///
first dictionary value
///
second dictionary value
///
the dictionary.
///
idictionary
///
author : petterliu 2008-12-24 15:11
public static
idictionary
getewsproperty(idictionary
dictionary)
return queryparams;
}return null;
}#region fillparamsdictionary
/// ///
fills the params dictionary.
///
///
second dictionary key
///
first dictionary value
///
second dictionary value
///
the field infos1.
///
the dictionary.
///
the queryparams.
///
author : petterliu 2008-12-24 15:11
private static void fillparamsdictionary(fieldinfo fieldinfos1, idictionary
dictionary,
idictionary
queryparams)}}
} #endregion
propertydefinitionbase,itemschema
/// ///entities the convert reflection test.
///
///
author:petter liu
[test]
public void entityconvertreflectiontest()
", filter.key));
trace.writeline(string.format(" value:", filter.value));
assert.isinstanceof(filter.key);
assert.isinstanceof(filter.value);}}
assert.areequal(2, searchpropertydic.count);
}
另乙個值得關注的細節,當我們使用enum型別作為key值時,dictionary的內部操作就需要將enum型別轉換為system.object,這就導致了效能問題。注意上面**還有乙個方法dictionaryhelper.createenumkeydictionaryinstance,這是專門為enmu做key時dictionary效能優化類.
public classdictionaryhelper
}
關於enumcomparer可參考在dictionary中使用列舉,以及accelerating enum-based dictionaries with generic enumcomparer.下面還是放上這個關鍵**,利用c# 3.0中lambda表示式:
/// ///enumcomparer
///
///
struct
/// ///
/// (new enumcomparer());
/// ]]>
//////
public class
enumcomparer
: iequalitycomparer
where t : struct
). compile().invoke(first, second);
}/// ///
gets the hash code.
///
///
the instance.
///
intpublic int gethashcode(t instance)
).compile().invoke(instance);
}}
author: petter liu
泛型 泛型類 泛型方法 泛型擦除
1 是什麼?一種允許我們在不確定引數型別時候使用的型別。例如我不知道a方法應該會傳string還是int,我就用個泛型先佔坑。2 為什麼要用泛型?泛型可以在編譯期自動確定具體型別,檢查型別是否匹配,可以提高 的重用率,減少冗餘編碼。3 泛型與object的區別?像上面說的我不知道方法a的引數型別,其...
泛型 (2)泛型類 泛型方法 泛型介面
一 泛型類 定義person類 package cn.itcast.p2.bean public class person implements comparable public person string name,int age public int compareto person p ov...
泛型 泛型介面
泛型介面 介面上要宣告泛型,介面的抽象方法要接這個泛型。實現類的宣告也要寫具體的泛型實參。注意 泛型實參要用引用資料型別。基本資料型別不行。如果一定要使用基本資料型別那麼得使用基本資料型別的包裝類。如果實現類中的型別不確定,也想帶泛型,並且和介面中的一致。那麼在實現類中宣告,將在此處宣告的 類的泛型...