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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34536551/article/details/84334743

目录

Clone 方法


●   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

猜你喜欢

转载自blog.csdn.net/qq_34536551/article/details/84334743
今日推荐