あなたが求めていることは不可能です。 a
,b
およびc
はコンパイラによって解析されるローカル変数名ですが、実際にはプロセス全体では保持されません。コンパイルされた最終的なDLLまたはEXEには、これらの変数の名前は含まれず、メモリ位置への参照だけが含まれます。これらの名前を実行時に取得する方法はありません。データ構造の一部ではなく、メタデータとして利用することもできません。
あなたの名前は特定のリストに名前でアクセスできるようになっているようですが、a)リストには名前がありません。b)リストは外部リストです。名前でオブジェクトにアクセスするためのデータ構造。 PHPのようにデフォルトでassociative arraysを使用する言語とは異なり、C#はデータ構造がより厳格です。List<T>
は、連想配列ではなくインデックスでアクセス可能な配列バックアップリストです。
名前でオブジェクトにアクセスする場合は、そのために設計されたデータ構造(この場合はDictionary<string, List<string>>
)を使用する必要があります。
var cList = lists["q"];
代替解釈
:
private List<string> a = new List<string>();
private List<string> b = new List<string>();
private List<string> c = new List<string>();
private Dictionary<string, List<string>> lists = new Dictionary<string, List<string>>();
lists.Add("a", a);
lists.Add("b", b);
lists.Add("q", c); // note that the key isn't related to the variable name.
あなたはその後、辞書のインデクサプロパティを介し名によって特定のリストにアクセスできます。これは、オブジェクトにアクセスするには、あなたがキーとして名を設定することができます
質問が完全にはっきりしていないので、1つのコメントに基づいて、何らかの理由でList<string>
クラスを拡張して名前を持ち帰りたいたとえそれがあなたのコードを特定のデータベース構造に結びつけるかなり悪いデザインであっても、それに関連した名前があります。
これはList<string>
をサブクラス化し、新しいプロパティを追加することによって達成することができます。
public class NamedList<T> : List<T>
{
public NamedList(string name)
{
Name = name;
}
public string Name {get;set;}
}
さて、代わりにList<string>
を作成するのではなく、あなたがNamedListを作成します:
var a = new NamedList<string>("a");
var q = new NAmedList<string>("c");
あなたが示していただけますか'a'、' b'、 'c'の文字列値にアクセスしようとしていて、エラーを受け取った行?また、これはコードスニペットが限られていることが原因ですが、リストのリストはなぜですか? – gravity
すべてのリストのすべての文字列を1つの文字列に結合しますか?それで 'String.Join'はあなたの友人です。 – HimBromBeere
'a'、' b'、 'c'は_variables_です。変数は、あなたの 'List'インスタンスへの参照_を含んでいます。しかし、これらの変数の名前は、インスタンスの_no property_です。 'var d = a;'リストの "名前"は "a"か "d"になりますか?ここであなたのミキシングするもの... –