在.net專案中使用到datatable和list集合的地方較多, 泛型的好處: 它為使用c#語言編寫物件導向程式增加了極大的效力和靈活性。不會強行對值型別進行裝箱和拆箱,或對引用型別進行。當涉及到兩者之間的轉換時,就顯得有些較為繁瑣。這個其中的問題主要在兩者的儲存方式,datatable的儲存方式採用一種二維表的方式進行資料的儲存操作,datatable表示記憶體中資料的乙個表。在list集合中,list的本質就是乙個陣列,則採用一種線性結構對資料進行儲存。
在轉換過程中,主要的問題在於不同型別的處理上,主要分為值型別和引用型別兩大類。
c#中值型別總是含有相應該型別的乙個值,指型別包含:簡單型別(****** types ),結構型別(struct types),列舉型別(enumeration types)。
簡單型別包含:整型,布林型,字元型 (整型的一種特殊情況),浮點型,小數型。
整型包含: sbyte 、byte、 short、 ushort、 int、 uint、 long、 ulong 和 char。
引用型別:引用型別不儲存它們所代表的實際資料,但它們儲存實際資料的引用。主要包含:物件型別,類類 型,介面,代表元,字串型別,陣列。
現提供轉換的**,僅供參考:
1.型別列舉:
//////型別列舉
/// private
enum
modeltype
private
static
modeltype getmodeltype(type modeltype)
//值型別
if(modeltype.isvaluetype)
//引用型別 特殊型別處理
if (modeltype == typeof(string
))
//引用型別 特殊型別處理
return modeltype == typeof(object) ?modeltype.object : modeltype.else;
}
2.具體的轉換操作方法:
//////datatable轉換為list
集合
/// ///
//////
public
static listdatatabletolist(datatable table)
return
list;
}public
static t datarowtomodel(datarow row)
break
;
//值型別
case
modeltype.enum:
else
if (fitype == typeof(string
)) }}
break
;
//引用型別 c#對string也當做值型別處理
case
modeltype.string:
break
;
//引用型別 直接返回第一行第一列的值
case
modeltype.object:
break
;
//引用型別
case
modeltype.else:
break
;
case
modeltype.enum:
else
if (fitype == typeof(string
))
}break
;
case
modeltype.string:
break
;
case
modeltype.object:
break
;
case
modeltype.else:
throw
new exception("
不支援該型別轉換");
default
:
throw
new exception("
未知型別");}}
}break
;
default
: model = default
(t);
break
; }
return
model;
}
以上的操作中,對不同型別有對應的處理方式。
C 把list轉化為Datatable
csdn廣告是越來越多了,所有部落格筆記不再更新,新 dotnet筆記 使用linq的時候,經常需要 select new 如何讀取這些欄位的單個值?通常兩種做法 1 object物件反射是可以做的 2 在反射的基礎上,轉化為datatable 也可以 如下例項 using system using...
C 將DataTable轉化為List
c 將datatable轉化為list 在使用三層架構開發乙個 時,希望把datatable物件轉換為list物件,於是在網上找資料,總結乙個比較方便的方法來實現 使用反射。思路 初始化乙個list物件 獲取到t所有的屬性,初始化乙個t物件 遍歷所有屬性,如果datatable中含有相應屬性的值則為...
將物件轉化為DataTable
imports system.collections.generic imports system.reflection public class tablebuilder of t private selectinfos as list of propertyinfo private propin...