2016-06-29 45 views
1

学习一些基础知识..我试图将一个数组的元素复制到另一个。假设我不知道数组'bar'的大小。所以,我创建了一个空数组'arr'来将元素复制到栏中。下面的代码不起作用。c# - 将一个数组的元素复制到另一个 - 编译错误

它的工作原理,如果我更换

string[] arr ={} to string[] arr ={"",""} 

如何声明空数组,我应该在我的代码修改来实现我的目标?

谢谢!

//code 

string[] bar = {"test", "user"}; 
string[] arr = {}; 



//iterate from the first to the last element of array bar 
for (int i =0;i<bar.Length-1;i++) 

{ 

    Console.WriteLine("copy"); 

    //copy string from bar to arr 
    arr[i]= bar[i]; 

    //display the copied content from new array 
    Console.WriteLine(arr[i]); 


} 

回答

0

通过string[] arr = {};你实例长度为零的空数组,所以你需要定义它像string[] arr = string[bar.Length];

UPD: 你的代码工作与string[] arr = {"",""},因为在这种情况下,你定义使用两个空字符串长度为2的数组,但是这是一个代码味道。

0

数组的大小是固定的,这就是为什么像列表这样的东西比他们更受欢迎。

如果您将数组定义更改为:string [] arr = {“”,“”}您正在定义一个大小为2的数组,与您的原始数组相同。当您尝试复制它时,编译器已经分配了所有内容并准备就绪,因此它知道位置0和位置1位于数组arr中。

在你的代码中的例子中,你的数组由string [] arr = {}定义;你给它一个空数组(数组大小为0)。编译器有一个问题,因为它不能在空的数组上引用位置0或位置1。

2

在C#中,数组的大小是固定的。因此,当您创建大小为0的数组时,您无法更改其包含的项目数量,而无需重新实例化它。

如果你想使用,你可以积极地添加/删除(这是很常见的)的集合,可以考虑使用List<T>

string[] bar = {"test", "user"}; 
List<string> list = new List<string>(); 

for (int i =0;i<bar.Length-1;i++) 
{ 
    list.Add(bar[i]); 
    Console.WriteLine(list[i]); 
} 
+0

为什么你需要一个列表,如果你知道你的收藏会是多大?在OP的情况下,它是一个条形阵列的大小。 – hazevich

+0

当他的测试程序中的一切都是静态的时候,他可以保证他在编译时知道集合的大小,所以你是对的。我仍然建议您熟悉C#中的泛型集合,因为它们更经常使用并提供更多好处。 – Jonesopolis

+0

@Jonesopolis即使不是静态的,数组也有一个Length属性,它会告诉你这个大小。 – dwbartz

0

您可以修改行:

string[] arr = new string[4]; 

List<string> arr = new List<string>(); 
0

如果你打算使用数组,你会想创建第二个数组作为th与第一个相同的尺寸。

string[] bar = {"test", "user"}; 
string[] arr = new string[bar.Length]; 

如果您事先知道您的数组将是两个,那么您可以将它创建为两个大小。否则,您将需要检查您正在复制的阵列的大小。如果您知道要添加和/或删除项目,则需要使用其他集合。

+0

虽然我很欣赏其他的努力,但我相信这是更直接的,并且以相同的问题思考。谢谢! – AKrishna

相关问题