1

我需要将我的结果分配给一个数组,但是当我使用这个代码时我遇到了一个问题:

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风格)结果[1] =数组(0 => firstattr,1 => secondattr等等......)

4

3 回答 3

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 数组。子数组本质上是相同的,除了我们List在 C# 中使用,因为它可以增长——我们不必在创建它时准确分配正确数量的元素。你可以这样做,但这可能是额外的工作。我将把它作为练习留给 OP 以这种方式实施。

万一您不知道什么Dictionary<int, List<string>>意思,您应该阅读 C# 中的泛型。翻译成英语,它基本上说“字典(即哈希表),键为int,值为List<string>,即值列表string”。另请注意,字典中的每个列表都必须单独初始化,这就是为什么我在 foreach 上方有一行。PHP 会自动重新定义事物,但 C# 不会。

于 2013-03-24T15:07:56.030 回答
0

我是如何创造我想做的事情的:

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++;
                        }
于 2013-03-24T15:16:36.863 回答
0

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;
于 2013-03-24T14:29:59.400 回答