泛型小記與泛型Dictionary使用Enum

2021-09-05 20:56:35 字數 2754 閱讀 5194

泛型的應用無處不在,下面是專案**片斷,比較典型的泛型與反射應用,提供了型別安全.場景是專案中有基於exchange訪問,使用了exchange web services manage api,我們需要寫乙個輔助查詢的enum屬性類,以dictionary的方式,enum型別對key,string型別為value.最後轉換成manage api中具體查詢類.

public enum 

contactqueryenum

好的,下面是轉換方法:

/// ///

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 class 

dictionaryhelper

}

關於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...

泛型 泛型介面

泛型介面 介面上要宣告泛型,介面的抽象方法要接這個泛型。實現類的宣告也要寫具體的泛型實參。注意 泛型實參要用引用資料型別。基本資料型別不行。如果一定要使用基本資料型別那麼得使用基本資料型別的包裝類。如果實現類中的型別不確定,也想帶泛型,並且和介面中的一致。那麼在實現類中宣告,將在此處宣告的 類的泛型...