class DM_Matrix {
public string[] DMInput_Name = new string[] {};
public string[] DMOutput_Name = new string [] {};
public int[] DMInput = new int[] { 99, 1, 2, 3, 4 };
public int[] DMOutput = new int[] { 99, 1, 2, 3, 4 };
}
public void Initialize() {
foreach (var i in DM_Matrix.DMInput_Name) {
CrestronConsole.PrintLine("[DM.Module.Input_Name"
+ DM_Matrix.DMInput_Name[i]);
}
}
“ i”上的编译器错误:
“(局部变量)字符串i
错误无法将类型'string'隐式转换为'int'“
我正在尝试打印整个DM.Module.Input_Name数组
我试图设置使用“ int i”代替“ var i”或将i从字符串强制转换为整数不会带来任何乐趣。不知道为什么将“ i”识别为字符串。以我的理解,对于数组,应将其识别为“ int”。
答案 0 :(得分:2)
您使用的是 foreach 循环,而不是 for 循环。如果这是这样的for循环:
foreach (var i = 0 ; i < DM_Matrix.DMInput_Name.Length ; i++)
{
CrestronConsole.PrintLine("[DM.Module.Input_Name" +DM_Matrix.DMInput_Name[i]);
}
然后是的,您可以将i
用作数组索引。
但是在foreach循环中,循环变量表示数组的项,因此您的循环应这样写:
foreach (var name in DM_Matrix.DMInput_Name) {
CrestronConsole.PrintLine("[DM.Module.Input_Name" + name);
}
答案 1 :(得分:2)
在这里您需要了解for
和foreach
循环之间的区别。
for loop
:如果要通过 index 访问数组中的元素,请使用for loop
。
foreach loop
:您不想使用索引,而是要遍历每个对象 ,然后使用foreach loop
要解决您的问题,请使用for循环或foreach循环,您将两个循环混为一谈。
使用for循环的解决方案,
//Use index to get value from an array
for (int i = 0; i < DM_Matrix.DMInput_Name.Length; i++)
{
CrestronConsole.PrintLine("[DM.Module.Input_Name" +DM_Matrix.DMInput_Name[i]);
}
使用foreach循环的解决方案
//Iterate over elements instead of index
foreach (var item in DM_Matrix.DMInput_Name)
{
CrestronConsole.PrintLine("[DM.Module.Input_Name" + item);
}