《随笔十四》——C#中的 “ 数组中有用的属性 和 方法 ”

目录

Clone 方法


点击这里进入官方文档了解 C# 中 Arrayd 属性和方法


 C# 数组从 System.Array 类继承, 它们可以从基类继承很多有用的属性和方法,如图:

namespace HelloWorld_Console
{
  
    class Program
    {
        static void PrintArray(int []a)
        {
            foreach (var x in a)
            {
                Write($"\n{x}");
              
            }
           
        }
        static void Main(string[] args)
        {
            int[] arr = new int[] { 15, 20, 5, 25, 10 };
            PrintArray(arr);
            WriteLine();

            Array.Sort(arr);
            PrintArray(arr);
            WriteLine();

            Array.Reverse(arr);
            PrintArray(arr);

            WriteLine();
            WriteLine($" Rank = {arr.Rank}, Length = {arr.Length}");
            WriteLine($"GetLength = {arr.GetLength(0)}");
            WriteLine($"GetType = {arr.GetType()}");
            ReadKey();
        }
    }
}


输出结果为:


15
20
5
25
10

5
10
15
20
25

25
20
15
10
5
 Rank = 1, Length = 5
GetLength = 5
GetType = System.Int32[]

 


Clone 方法


Clone 方法为数组进行浅复制,也就是说,它只创建了数组本身的克隆。 对于类型数组和引用类型数组而言,有不同的结果。

  • 克隆值类型数组会得到两个独立的数组。
  • 克隆引用类型数组会导致两个数组指向相同的对象。

Clone方法返回 object类型的引用,该引用必须强制转换为数组类型

下列代码克隆一个值类型数组的示例,它产生了两个独立的数组

namespace HelloWorld_Console
{
  
    class Program
    {
      
        static void Main(string[] args)
        {
           int [] intArr1 = { 1, 2, 3 };
            int[] intArr2 = (int[])intArr1.Clone();
            WriteLine("输出intArr2数组中的值:");
            foreach (var tt in intArr2)
            {
                WriteLine(tt);
            }
            for (int i=0;i<intArr2.Length;++i)
            {
                intArr2[i] *= 100;
            }
            WriteLine("输出改变intArr2数组中的值:");
            foreach (var tt in intArr2)
            {
                WriteLine(tt);
            }
            ReadKey();
        }
    }
}

输出结果为:

输出intArr2数组中的值:
1
2
3
输出改变intArr2数组中的值:
100
200
300

克隆引用类型数组会导致两个数组指向相同的对象:

namespace HelloWorld_Console
{
    class A
    {
        public int Value = 5;
    }
    class Program
    {
        static void Main(string[] args)
        {
            A[] AArray1 = new A[3] { new A(), new A(), new A() };
            WriteLine("先输出AArray1的值:");
            foreach(var tt in AArray1)
            {
                WriteLine(tt.Value);
            }

            A[] AArray2 = (A[])AArray1.Clone();
            WriteLine("再输出AArray2的值:");
            foreach (var tt in AArray1)
            {
                WriteLine(tt.Value);
            }
            WriteLine("再输出AArray2的改变后的值:");
            for (int i=0;i<AArray2.Length;++i)
            {
                AArray2[i].Value = i+1;
                AArray2[i].Value *= 100;
                WriteLine(AArray2[i].Value);
            }
            ReadKey();
        }
    }
}


输出结果为:

先输出AArray1的值:
5
5
5
再输出AArray2的值:
5
5
5
再输出AArray2的改变后的值:
100
200
300

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值