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'に暗黙的に変換できません。2回:; 期待されています

正しく行う方法を教えてください。私はC#を初めて使用しますが、この問題を解決できません。良い1日を。

編集

多次元配列を作成したいので(phpスタイル)result [1] = array(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

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 に答える
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 に答える