アップデートを読むと、これは別の質問になります。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#はそうではありません。