为啥这两种方法不一样? [关闭]

Posted

技术标签:

【中文标题】为啥这两种方法不一样? [关闭]【英文标题】:Why dont these two methods work the same? [closed]为什么这两种方法不一样? [关闭] 【发布时间】:2018-06-23 08:27:33 【问题描述】:

我想创建一个显示数组元素的方法,第一个方法 elementsOfArray 被调用时,而不是在 () 内显示给定数组的元素,它在方法内显示数组的元素(在这个如果没有元素所以它只显示 , , , ,) 但是名为 elementsOfArray1 的方法工作正常我不明白这两种方法之间有什么区别,为什么我必须在方法中声明另一个数组只使用我在() 中声明为参数的那个?

class Program

    static void elementsOfArray(string[] array)
    
        array = new string[array.Length];
        int i;
        for ( i = 0; i < array.Length - 1; i++)
            Console.Write(array[i] + ",");
        Console.WriteLine(array[i]);
    
    static void elementsOfArray1(string[] array)
    
       string[] array1 = new string[array.Length];
        int i;
        for (i = 0; i < array.Length - 1; i++)
            Console.Write(array[i] + ",");
        Console.WriteLine(array[i]);
    
    static void Main(string[] args)
    
        string[] names =  "Robert", "Allen", "Brandon", "Jack", "Erwin" ;
        elementsOfArray(names);
        elementsOfArray1(names);
        Console.ReadKey();
    

【问题讨论】:

你能给我们两个完整的输出吗?这可能有助于我们真正发现差异。 “为什么我必须在方法中声明另一个数组,而不是只使用我在 () 中声明为参数的数组?”你没有。这实际上就是把一切都搞砸的东西。第二种方法中的string[] array1 = new string[array.Length]; 行不执行任何操作。第一种方法中的array = new string[array.Length]; 行把一切都搞砸了。所以只需删除这些行。 @Dennis_E 我认为这甚至没有必要我可以直接循环,非常感谢 【参考方案1】:

很明显! 在第一种方法elementsOfArray 中,您将再次初始化您的数组:

array = new string[array.Length];

然后你把它变成空的。但在第二个elementsOfArray1

string[] array1 = new string[array.Length];
int i;
for (i = 0; i < array.Length - 1; i++)
    Console.Write(array[i] + ",");

您正在循环通过array,而不是array1,并且您没有更改array

【讨论】:

啊,我明白了,谢谢你的解释,我明白了 更正这是您的代码 sn-p 中发生的事情【参考方案2】:

那是因为您在第一种方法中重新分配 arraynew string[array.Length];total number of array items but not copying array items values

        static void elementsOfArray(string[] array)
        
           array = new string[array.Length];
           int i;
           for (i = 0; i < array.Length - 1; i++)
                Console.Write(array[i] + ",");
                //Console.WriteLine(array[i]);
        

在第二种方法 string[] array1 = new string[array.Length]; 中。 array1 还包含 5 个空字符串的数组

    static void elementsOfArray1(string[] array)
    
        string[] array1 = new string[array.Length];
        int i;
        for (i = 0; i < array.Length - 1; i++)
            Console.Write(array[i] + ",");
       // Console.WriteLine(array[i]);
    

如果您希望两种方法的行为相同。只需替换

for (i = 0; i < array.Length - 1; i++)
        Console.Write(array[i] + ",");

for (i = 0; i < array.Length - 1; i++)
        Console.Write(array1[i] + ",");

您将获得相同的结果,即,,,,,

【讨论】:

以上是关于为啥这两种方法不一样? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥这两种轮换方法会给我不同的用户体验?

在 React Native 中,这两种方法中哪种 Async Await 方法更好,为啥?

为啥这两种将图像从 SQL CE 加载到 WPF 图像中的方法会产生不同的结果?

这两种寻址方式有啥区别[关闭]

启动线程的两种方法的对比

这两种方法有啥区别