C#定义动态数组(泛型)

C#代码中定义动态数组的时候,是很有讲究的。我们通常不知道我们需要多大空间,而且在数据之间的转化也是一个问题。


问题一:


GUID类型无法转换为GUID[]


解答:


我们尝试的时候一般用的是数组:


<span style="font-size:18px;"> 
Guid[] staff = new Guid[] { settingEvaluationBLL.LoadEnities(s => s.YzStaffEntityEvaluaterID.ID == EvaluationID).ToList().Select(u=>u.CriticsID).ToList().FirstOrDefault() };
</span>

我们都知道.FirstOrDefault(),返回序列中的第一个元素;如果序列中不包含任何元素,则返回默认值。因此它根本不是返回的数组。


而实际上new Guid{字符串类型},而且这个字符串类型的是可以转换为GUID类型的。


因此我们用了.ToArray<Guid>();是一个集合,集合的大小是可以变动的。


正确的写法应该是:


<span style="font-size:18px;">           
List<Model.YzSettingEvaluationEntity> resultlist = settingEvaluationBLL.LoadEnities(s=>s.YzStaffEntityEvaluaterID.ID ==EvaluationID).ToList();
           
Guid[] str = resultlist.Select(u => u.CriticsID).ToArray<Guid>();
</span>

问题二:如何得到任意类型的集合?


<span style="font-size:18px;">            
String[] score;
Decimal[] scorevalue;
score = scoreslist.Select(u => u.ScoreLevel).ToArray();
scorevalue = scoreslist.Select(u => u.Scores).ToArray();</span>

我们看到了,Arraylist默认初始容量为0.随着元素添加到ArrayList中,容量会根据需要通过重新分配自动增加。


当然Arraylist有了如此好处,一定会有弊端的。它的弊端就是类型不安全,我们用它存放至类型的数据,比如int,string型等等,用ArrayList就意味著都需要将值类型装箱为Object对象,使用集合元素时,还需要执行拆箱操作,这就带来了很大的性能损耗。


问题三:如何定义各种类型的泛型?


泛型:


<span style="font-size:18px;">        
IList<String>SeriesNameSave = new List<String>();</span>

如何给泛型装箱:


还举个GUID类型的例子:


<span style="font-size:18px;">	
IList<GUID> SeriesIDSave = new List<GUID>();

SeriesIDSave.Add(seriesBLL.LoadEnities(u => u.SeriesName == SeriesValue[i]).Select(u => u.ID).FirstOrDefault()); 
</span>

泛型在扩容的时候,用到的是Add。


如果我们用泛型集合使用会更加方便,看同样是得到GUID类型:


<span style="font-size:18px;">        
SeriesValue = resultlist.Select(u => u.YzStaffEntityCriticsID.YzSeriesEntityID).ToArray<Guid>();
</span>

这样是不是一句话就可以解决了。


总结:


我们看看数组、集合、泛型之间的区别:


集合可放任意类型的元素,会自动增大,取出时要做类型转换。


泛型集合只能放定义类型的元素,会自动增大,取出时不用做类型转换。


数组只能放定义类型的元素,不会自动增大,取出时不用做类型转换。



评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值