C# 获得枚举值中所有数据到Array(数组)中

 Array LogType = Enum.GetValues(LogTypes.登录.GetType()); 
  public enum LogTypes
        {
            登录, 添加, 修改, 删除, 导出, 异常
        }

引用某大神回答-----  Array是数组,动态的 int[]也是数组,但是是静态的。。

http://www.runoob.com/csharp/csharp-array-class.html 

Array 类是 C# 中所有数组的基类,它是在 System 命名空间中定义。Array 类提供了各种用于数组的属性和方法。

 

转载于:https://www.cnblogs.com/enych/p/10207671.html

<think>好的,我现在要回答用户的问题:C#中的数组是引用类型还是类型。首先,我需要回忆C#的类型系统。C#中的类型分为类型和引用类型。类型包括结构体(如int、double等基本类型)和枚举,它们在栈上分配内存,赋时复制整个。引用类型包括类、接口、委托等,它们在堆上分配内存,变量存储的是对象的引用,赋时复制引用。 接下来,关于数组C#数组属于System.Array类,而类都是引用类型。因此,数组应该是引用类型。但需要确认这一点。比如,当声明一个数组变量时,它实际上存储的是对数组对象的引用,而不是数组本身。例如,int[] arr1 = new int[3]; int[] arr2 = arr1; 这时arr2和arr1指向同一个数组,修改其中一个会影响另一个,这说明数组是引用类型。 另外,类型数组中的元素如果是类型,比如int数组,每个元素都是类型,存储在连续内存中。但这不影响数组本身是引用类型。数组作为整体在堆上分配,变量保存引用。 可能存在的疑问:结构体是类型,但结构体数组呢?比如struct S{},S[] sArr = new S[5]; 这里的sArr仍然是引用类型,数组对象在堆中,元素sArr[0]是结构体实例,存储在数组的内存块中。数组本身作为System.Array的实例,属于引用类型。 还需要确认官方文档或可靠来源。查阅Microsoft文档,System.Array类属于引用类型,因此数组是引用类型。此外,当传递数组到方法时,传递的是引用,而不是副本,修改会影响原数组。 可能的例外情况?比如数组作为参数时,可以通过ref传递,但默认情况下是引用传递。这也支持数组是引用类型的结论。 总结:C#中的数组是引用类型,因为它们是System.Array的实例,存储在堆中,变量持有引用,赋和传递时复制引用而非数据本身。</think>在C#中,**数组是引用类型**。以下是具体分析: --- ### 1. **引用类型的基本特征** - **内存分配**:引用类型的实例在堆(Heap)上分配内存,变量本身存储的是指向堆内存地址的引用。 - **赋行为**:当将一个数组给另一个变量时,复制的仅是引用(地址),而非数据本身。例如: ```csharp int[] arr1 = new int[] {1, 2, 3}; int[] arr2 = arr1; // arr2和arr1指向同一个数组 arr2[0] = 100; // 修改arr2会影响arr1 Console.WriteLine(arr1[0]); // 输出:100 ``` - **参数传递**:将数组作为参数传递时,传递的是引用,方法内对数组的修改会影响原始数组。 --- ### 2. **数组的底层实现** - **继承关系**:所有数组隐式继承自`System.Array`类,而类(Class)是引用类型。 - **存储方式**:即使数组元素是类型(如`int`、`struct`),数组本身仍在堆中分配内存。例如: ```csharp int[] numbers = new int[3]; // 数组对象(引用类型)存储在堆中 ``` --- ### 3. **与类型的区别** - **类型数组的元素**:如果数组元素是类型(如`int`),则每个元素直接存储在数组的内存块中。 - **引用类型数组的元素**:如果数组元素是引用类型(如`string`),则数组存储的是对这些对象的引用。 --- ### 4. **验证示例** ```csharp int[] a = new int[] {1, 2, 3}; int[] b = a; // 复制引用 b[0] = 100; // 修改b会影响a Console.WriteLine(a[0]); // 输出:100(验证引用共享) // 通过ReferenceEquals验证是否为同一对象 Console.WriteLine(object.ReferenceEquals(a, b)); // 输出:True ``` --- ### 5. **特殊情况:`Array`作为参数** 当数组作为方法参数时,默认按引用传递: ```csharp void ModifyArray(int[] arr) { arr[0] = 999; } int[] myArray = {1, 2, 3}; ModifyArray(myArray); Console.WriteLine(myArray[0]); // 输出:999 ``` --- ### 总结 - **数组是引用类型**:无论元素是类型还是引用类型,数组本身始终是引用类型。 - **关键表现**:赋和参数传递时共享引用,堆内存分配,继承自`System.Array`类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值