数组赋值异常:不能隐式转换类型'int'& # 39;字符串# 39;两次:
本文关键字:两次 int 字符串 类型 异常 赋值 不能 转换 数组 | 更新日期: 2023-09-27 18:05:50
我需要将我的结果分配给一个数组,但是当我使用这段代码时,我遇到了一个问题:
string[] result = null;
result = new string[10];
int num = 0;
int id = Convert.ToInt32(textReader.GetAttribute("id"));
foreach (string attr in attrs)
{
// this line fails '/
result[id] = num { textReader.GetAttribute(attr) };
// I can't put there correctly my int - num
num++;
}
错误是:不能隐式地将类型'int'转换为'string'两次:;预计
你能告诉我怎么正确地做吗?我是c#新手,无法解决这个问题。祝你过得愉快。
<标题>编辑我想创建多维数组所以(php风格)result[1] = array(0 =>首先,1 =>)
标题>阅读你的更新将这变成了一个不同的问题。与PHP不同,c#对类型很重视,所以你不能只是把东西塞进变量或数组槽。您必须显式声明您想要一个多维数组。c#中的数组不像PHP中的那么灵活。在PHP中,可以使用任何东西作为键。在c#中,你必须使用完全不同的类型(这实际上是PHP在幕后所做的,因为PHP中的所有数组在内部都是哈希表)。
我将做另一个假设,即这段代码的一部分是在一个函数中,该函数填充单个id
的属性,并且您的result
变量实际上在该函数的多个调用中共享。否则我看不出你的代码有什么意义。
// this is probably shared
Dictionary<int, List<string>> result = new Dictionary<int, List<string>>();
// perhaps this next bit is in a function that gets the attributes for a given tag
int id = Convert.ToInt32(textReader.GetAttribute("id"));
result[id] = new List<string>();
foreach(string attr in attrs) {
result[id].Add(textReader.GetAttribute(attr));
}
我们这里有一个整数和可增长数组的哈希(c#称之为字典)。也就是说,外部结构相当于将整数映射到子数组的PHP数组。子数组本质上是相同的,除了我们在c#中使用List
,因为它可以增长——我们不必在创建它时分配正确数量的元素。你可以这样做,但这可能是额外的工作。我将把它作为一个练习留给OP去实现它。
如果你不知道Dictionary<int, List<string>>
是什么意思,你应该阅读c#中的泛型。翻译成英语,它基本上是说"字典(即哈希表),键为int
,值为List<string>
,即string
的值列表"。还要注意,字典中的每个列表都必须单独初始化,这就是为什么我在foreach上面写了一行。
如何创建我想要做的事情:
string[][] result = null;
int num = 0;
int id = Convert.ToInt32(textReader.GetAttribute("id"));
string[] arr = new string[3];
foreach (string attr in attrs)
{
arr[num] = textReader.GetAttribute(attr);
result[id] = arr;
num++;
}
textReader.GetAttribute(attr)将返回一个字符串,这是分配给num这是一个整数,这就是为什么你得到错误:"不能隐式转换类型'int'到'string'"
// this line fails '/
result[id] = num { textReader.GetAttribute(attr) };
// I can't put there correctly my int - num
num++;
可以重写为:
string attribute = textReader.GetAttribute(attr);
result[id] = attribute;
num = int.Parse(attribute) + 1;