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>

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

总结:

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

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

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

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

时间: 2024-10-11 07:37:58

C#定义动态数组(泛型)的相关文章

C语言 动态数组实现

一.概述 C语言是不能直接定义动态数组的,数组必须在初始化时确定长度. 如果要在程序运行时才确定数组的长度,就需要在运行的时候,自己去向系统申请一块内存用动态内存分配实现动态数组. 二.动态内存分配函数 1.malloc()函数 void *malloc(unsigned int size) 分配size个字节的内存空间,返回地址的指针,如果内存不够分,就返回空指针NULL. 注意:返回的指针是没有类型的,所以要使用得强制类型转换. 2.calloc()函数 void *calloc(unsig

WEB开发教程--ASP中静态数组与动态数组的用法

在ASP中,数组是具有相同名字的一组变量,数组中包含多个元素,由不同的下标值区分数组的各个元素.在VBScript中,数组有两种类型:静态数组和动态数组. 1.静态数组 静态数组在编译时开辟内存区,数组大小在运行时不可改变. 定义一个一维数组mmArray(3) Dim mmArray(3) mmArray(0)=1 mmArray(1)=3 mmArray(2)=5 mmArray(3)=7 其中mmArray是数组名,数组的下界为0,上界为3,数组元素从mmArray(0)到mmArray(

asp动态数组

本文所说的 ASP 数组是指在 ASP 中以默认语言 VBScript 为语言的数组. 样例: Dim   MyArray() for   i   =   0   to   10 ReDim   Preserve   MyArray(i) MyArray(i)=i next 下标 ASP 数组的下标也是从 0 開始的. 要获取某个元素的值则在数组变量后面加上括号,括号里标明下标值,比方 arr(0),注意不是中括号,而是小括号. 定义 dim arr() '定义动态数组 dim arr2(2)

VBA动态数组

如何动态地向数组中添加新的数据,可以用动态数组实现. dim arr() as string '定义动态数组,这里不能用variant类型,不然后面用redim会出错 redim preserve arr(row,col) as string 'redim就是起动态定义的作用,因为这里row和col可以是变量,dim中必须是常量.preserve按列保留数组中已有的数据,所有加preserve之后只能按列添加数据 二维数组的赋值则用一组循环语句进行赋值,不能按列或行整体赋值. 另外编程中一定要考

C++ Primer 学习笔记与思考_5 数组和动态数组易错点解读

1. 数组的定义 数组定义中的类型名可以是内置数据类型或者类类型:除了引用之外,数组元素的类型还可以是任意的复合类型.另外,非const变量以及要到运行阶段才知道其值的const变量都不能用于定义数组的维数. #include <iostream> #include <string> #include <cstring> #include <bitset> using namespace std; int main() { const int MAXN1 =

泛型的其他应用-接口,方法定义使用,泛型数组,泛型的嵌套设置。

掌握泛型的接口的使用: 掌握泛型方法的定义与使用: 掌握泛型数组的使用: 掌握泛型的嵌套设置: 具体内容 1.1泛型接口基本概念 之前所有的操作都是在类中直接使用泛型操作的,那么,对于JAVA来说,也可以在接口中定义及使用泛型. 声明泛型接口: interface 接口名称<接口标示>{} interface Info<T> { public T getInfo(); } 如果现在一个子类实现此接口是没有进行正确的实现,则在编译时候会出现警告, 例子: interface Info

爪哇国新游记之十五----泛型动态数组类

import java.lang.reflect.Array; /** * 泛型动态数组类 * */ public class DynamicArray<T extends Object>{ private T[] arr; private Class<T> type; private int currCount; private static final int InitSize=2; public DynamicArray(Class<T> type){ this.

VB.NET 数组的定义 动态使用 多维数组

我们都知道在全部程序设计语言中数组都是一个非常重要的概念,数组的作用是同意程序猿用同一个名称来引用多个变量,因此採用数组索引来区分这些变量.非常多情况下利用数组索引来设置一个循环,这样就能够高效地处理复杂的情况,因此在非常多情况下,使用数组能够缩短或者简化程序的代码.本文主要介绍VB.NET数组的使用,希望对大家的使用带来帮助. 数组中的第一个元素的下标称为下界,最后一个元素的下标称为上界,其余的元素连续地分布在上下界之间,而且数组在内存中也是用连续的区域来存储的,所以要求声明数组每维的长度不能

第二十二篇 玩转数据结构——构建动态数组

1.. 数组基础 数组就是把数据码成一排进行存放. Java中,数组的每个元素类型必须相同,可以都为int类型,string类型,甚至是自定义类型. 数组的命名要语义化,例如,如果数组用来存放学生的成绩,那么命名为scores就比较合适. 索引(index)是数组中的一个重要概念,它是我们给数组中的每个元素分配的编号,从0开始,依次递增.如果数组中存放了n个元素,第一个元素的索引是0,最后一个元素的索引是n-1. 通过索引,我们可以对数组中的元素进行快速访问,例如,我们访问索引为2的元素也就是数