C#代碼中定義動態數組的時候,是很有講究的。我們通常不知道我們需要多大空間,而且在數據之間的轉化也是一個問題。
問題一:
GUID類型無法轉換為GUID[]
解答:
我們嘗試的時候一般用的是數組:
Guid[] staff = new Guid[] { settingEvaluationBLL.LoadEnities(s => s.YzStaffEntityEvaluaterID.ID == EvaluationID).ToList().Select(u=>u.CriticsID).ToList().FirstOrDefault() };
而實際上new Guid{字符串類型},而且這個字符串類型的是可以轉換為GUID類型的。
因此我們用了.ToArray
正確的寫法應該是:
Listresultlist = settingEvaluationBLL.LoadEnities(s=>s.YzStaffEntityEvaluaterID.ID ==EvaluationID).ToList(); Guid[] str = resultlist.Select(u => u.CriticsID).ToArray ();
String[] score; Decimal[] scorevalue; score = scoreslist.Select(u => u.ScoreLevel).ToArray(); scorevalue = scoreslist.Select(u => u.Scores).ToArray();
我們看到了,Arraylist默認初始容量為0.隨著元素添加到ArrayList中,容量會根據需要通過重新分配自動增加。
當然Arraylist有了如此好處,一定會有弊端的。它的弊端就是類型不安全,我們用它存放至類型的數據,比如int,string型等等,用ArrayList就意味著都需要將值類型裝箱為Object對象,使用集合元素時,還需要執行拆箱操作,這就帶來了很大的性能損耗。
問題三:如何定義各種類型的泛型?
泛型:
IListSeriesNameSave = new List ();
還舉個GUID類型的例子:
IListSeriesIDSave = new List (); SeriesIDSave.Add(seriesBLL.LoadEnities(u => u.SeriesName == SeriesValue[i]).Select(u => u.ID).FirstOrDefault());
如果我們用泛型集合使用會更加方便,看同樣是得到GUID類型:
SeriesValue = resultlist.Select(u => u.YzStaffEntityCriticsID.YzSeriesEntityID).ToArray();
總結:
我們看看數組、集合、泛型之間的區別:
集合可放任意類型的元素,會自動增大,取出時要做類型轉換。
泛型集合只能放定義類型的元素,會自動增大,取出時不用做類型轉換。
數組只能放定義類型的元素,不會自動增大,取出時不用做類型轉換。