数组赋值异常:不能隐式转换类型'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 =>)

数组赋值异常:不能隐式转换类型'int'& # 39;字符串# 39;两次:

阅读你的更新将这变成了一个不同的问题。与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;