あなたはいくつかの概念を完全に混合しているようです。
dynamic
は、コンパイラでレイトバインドコードを生成するトリガです。コンパイル時には検証されませんが、通常のC#コードと同じ規則に従います。複数のプロパティを持つことはできません(.NETのどこにいてもかまいません)。唯一の方法は、コレクション値のプロパティを持ち、コレクションに新しい値を追加することです。このような何か:
dynamic obj = new ExpandoObject();
obj.SomeProperty = new List<object>();
obj.SomeProperty.Add(SomeValue);
obj.SomeProperty.Add(AnotherValue);
foreach(var somePropertyValue in obj.SomeProperty)
{
DoSmth(somePropertyValue);
}
dynamic
IDictionary
またはLookup
とは何の関係もありません。変数dynamic
は任意のオブジェクトにすることができます。たとえば、int
の値です。 dynamic
を使用している場合はが非常にで、それはIDictionary
インターフェイスにキャストするのが奇妙です。ちょうどAdd
に電話をかけると、DLRはあなたのために方法を解決します(上記のように)。
動的環境(スクリプト言語、COMなど)と相互運用する場合にのみ、通常dynamic
を使用する必要があります。 C#コードでしか動作しない場合、すべての動的なものを捨てて、通常の.NETコレクションを使用してください。コンパイラによって静的に検証され、より速く動作します。ああ、はい、あなたはに値を置く独自のDynamicObject
の実装を作成しようとすることができ
var dictionary = new Dictionary<string, ICollection<object>>();
dictionary["SomeProperty"] = new List<object>();
dictionary["SomeProperty"].Add(SomeValue);
dictionary["SomeProperty"].Add(AnotherValue);
foreach(var somePropertyValue in dictionary["SomeProperty"])
{
DoSmth(somePropertyValue);
}
UPDATE
:
たとえば、あなたは、動的な辞書を持っているDictionary<string, ICollection<object>>
を使用することができます既存の値を上書きするのではなく、プロパティの割り当て時に袋に入れます。具体的には、TrySetMember methodを上書きする必要があります。しかし、まずこの複雑なものすべてが本当に必要な場合は、まず考えてみてください。
genralの意味で "dynamic"を使用していることを確認してください(C# 'dynamic' - http://msdn.microsoft.com/en-us/library/dd264741.aspx)。 –
私はC#のダイナミックを使用しています...そこには別のタグがありますか? –