c 關於泛型和Object的效率問題,那個效率高

2021-10-03 04:30:59 字數 1517 閱讀 1111

乙個比較簡單的功能,需要把乙個未知型別轉成我想要的資料型別。

例如:我想轉成int

int xx = getvalue("1");

private static t getvalue(string str)

這一句就是先把內容轉成object型別,然後再轉成我需要的型別。

那如果換成:

object obj = getvlaue("abcd", str.gettype());

private static object getvlaue(object o,type t)

return null;

}按道理豈不是效率更高?

或者說有沒有什麼辦法不用把泛型轉成object就能返回呢?

小弟正在了解這一部分,有什麼錯誤的地方麻煩各位大佬諒解。

第一段**肯定效率更高一些,因為是jit一次榜定,後者反射每次呼叫一次就花費一次時間。

什麼是泛型?

c# 語言和公共語言執行時 (clr) 在 2.0 版本中新增了泛型。泛型將型別引數的概念引入 .net framework,這樣就可以設計具有相同特徵的類和方法:在客戶端**宣告並初始化這些類和方法之前,這些類和方法會延遲指定乙個或多個型別(使用佔位符~3:數字代表型別引數個數)。

泛型有什麼用?

使用泛型型別可以最大限度地重用**、保護型別安全性以及提高效能。泛型最常見的用途是建立集合類 list。

可以建立:泛型介面、泛型類、泛型方法、泛型事件和泛型委託。

泛型約束有哪些?

where t : struct   型別引數必須是值型別。 

where t : class    型別引數必須是引用型別。 此約束還應用於任何類、介面、委託或陣列型別。

where t : unmanaged   型別引數不能是引用型別,並且任何巢狀級別均不能包含任何引用型別成員。

where t : new()     型別引數必須具有公共無引數建構函式。

where t : 《基類名》    型別引數必須是指定的基類或派生自指定的基類。

where t : 《介面名稱》  型別引數必須是指定的介面或實現指定的介面。

where t : u     為 t 提供的型別引數必須是為 u 提供的引數或派生自為 u 提供的引數。

某些約束是互斥的。 所有值型別必須具有可訪問的無引數建構函式。 struct 約束包含 new() 約束,且 new() 約束不

小蜜蜂論壇回帖機

能與 struct 約束結合使用。 unmanaged 約束包含 struct 約束。 unmanaged 約束不能與 struct 或 new() 約束結合使用。

泛型類:

class genericclass

泛型介面:

public inte***ce genericinte***ce{}

泛型方法:(可以作為傳入引數,也可以作為返回值)

public t void create(t t)

泛型委託:

public delegate void genericdelegate(t t);

C 中泛型效率對比(ArrayList和List)

泛型一般效率比較高,因為它的操作並不是裝箱拆箱,也不涉及object型別轉換。下面的一段程式主要測試泛型列表list與陣列列表araylist之間的效能對比。這兩種都可以建立列表,且都可以面對不同的資料型別。泛型的資料型別程式設計中指定。arraylist型別為object類,會進行資料的裝箱和拆箱...

C 遍歷Object各個屬性含List泛型巢狀。

解決方案 1遍歷model各個屬性,當為null時,賦值 2.支援泛型list的巢狀。前提條件 model的值只有這幾種,list,string 多層巢狀。於是寫了如下 遍歷屬性,遇到很多問題,初稿,臨時用,後面完善。public static object cjremovenullbyrecurs...

c 泛型和委託

listlst new list listl lst.findall delegate t t 或使用linq private void button1 click object sender,eventargs e if mylist.find mathchar null else private...