現時点で考えられる唯一のこと (テストしていないので、可能かどうかはわかりません) は、動的タイプのオブジェクトを用意し、リフレクションと InvokeMember( を使用して実行時にフィールドを設定しようとすることです。 )、動的タイプのオブジェクトには検証がないため、これが機能する可能性を与えることができます。
更新:
ExpendoObject でテストしましたが、InvokeMember は動作していないようです (少なくともデフォルトのバインダーでは動作しませんが、DynamicObject ではテストしていませんが、動作する可能性はあまりありませんが、まだ動作する可能性がありますDynamicObject の使用方法については、http://msdn.microsoft.com/en-us/library/ee461504.aspx を参照してください。
動的オブジェクトが IDictionary としてキャストされているメソッドを本質的に記述している ExpandoObject にプロパティを動的に追加する を見てください。その後、実際にオブジェクトのプロパティを取得している間に、標準の辞書アクセスを使用してプロパティを追加できます。 .
ExpendoObject 型の動的オブジェクトを使用してサンプル プロジェクトでテストした後、IDictionary 型を使用してそれを参照する別の変数を追加し、次の例のように両方のプロパティを設定および取得しようとしました。
dynamic test = new ExpandoObject();
//reference the object as a dictionary
var asDictinary = test as IDictionary<string, Object>;
//Test by setting it as property and get as a dictionary
test.testObject = 123;
Console.Write("Testing it by getting the value as if it was a dictionary");
Console.WriteLine(asDictinary["testObject"]);
//Test by setting as dictionary and get as a property
//NOTE: the command line input should be "input", or it will fail with an error
Console.Write("Enter the varible name, ");
Console.Write("note that for the example to work it should the word 'input':");
string variableName = Console.ReadLine();
Console.Write("Enter the varible value, it should be an integer: ");
int variableValue = int.Parse(Console.ReadLine());
asDictinary.Add(variableName, variableValue);
Console.WriteLine(test.input);//Provided that the command line input was "input"
(ただし、あなたのケースでは、とにかくコードでプロパティに直接アクセスしないため、その必要性はわかりません。おそらく辞書を直接使用できるでしょう。なぜそれらが必要なのかわかりませんオブジェクトのプロパティ。コンパイル時にそれらを参照する場合にのみ必要です。
しかし、おそらく私はあなたを誤解しており、あなたは動的変数を探していて、動的プロパティ [$$ 構文を使用して PHP で利用できるもの] を探していません。その場合は、c# には変数がまったくないことに注意してください。すべてがオブジェクトにカプセル化されているため)。
詳細については、C# でクラスにフィールドを動的に追加する方法を参照することもできます。