Dynamische Wörterbuch Verwendung in C#
Ich bin mit einem Dynamischen dictionary in C#. Das problem, das ich bin vor ist das Verhalten der TryGetMember, die ich überschreiben in der dynamischen dictionary-Klasse.
Hier ist der code der dynamischen Wörterbuch.
class DynamicDictionary<TValue> : DynamicObject
{
private IDictionary<string, TValue> m_dictionary;
public DynamicDictionary(IDictionary<string, TValue> a_dictionary)
{
m_dictionary = a_dictionary;
}
public override bool TryGetMember(GetMemberBinder a_binder, out object a_result)
{
bool returnValue = false;
var key = a_binder.Name;
if (m_dictionary.ContainsKey(key))
{
a_result = m_dictionary[key];
returnValue = true;
}
else
a_result = null;
return returnValue;
}
}
Hier, TryGetMember wird zur Laufzeit aufgerufen werden, wenn wir finden einige Schlüssel von außen, aber es ist merkwürdig, dass binder ' s Name-member, die immer den Schlüssel gibt, was wir von außen ist es immer löst der name des Schlüssels geschrieben, wie Zeichen des alphabets.
z.B. wenn das Objekt der DynamicDictionary gemacht:
Dictionary<string,List<String>> dictionaryOfStringVsListOfStrings;
//here listOfStrings some strings list already populated with strings
dictionaryOfStringVsListOfStrings.Add("Test", listOfStrings);
dynamic dynamicDictionary_01 = new
DynamicDictionary<List<String>(dictionaryOfStringVsListOfStrings);
string somekey = "Test";
//will be resolve at runtime
List<String> listOfStringsAsValue = dynamicDictionary_01.somekey
Nun, was hier passiert ist "somekey" wird der Wert von a_binder (ich.e a_binder.Name="somekey"). Es sollte geklärt werden, wie a_binder.Name = "Test" und dann aus dem dynamischen Wörterbuch wird es suchen Sie listOfStrings gegen dieses Schlüssels (D. H. eigentlich "Test", aber es behebt nicht den Wert, sondern die tatsächlichen Variablen-name als Schlüssel).
Gibt es eine Möglichkeit, um dieses?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Punkt der dynamischen Typisierung ist, um die member-Namen selbst aufgelöst aus dem source-code-Element zugreifen.
Dynamische Typisierung funktioniert genau so, wie es gedacht ist hier - es ist nicht entwickelt um den Wert der Variablen zu, und verwenden Sie ihn als Mitglied name - es wurde entwickelt, um verwenden Sie die member-Namen, die Sie verwendet in Ihren source-code (d.h. "somekey").
Es klingt wie Sie wirklich nicht brauchen, dynamische Typisierung an alle hier - nutzen Sie einfach
Dictionary<string,List<String>>
normal:EDIT: Es klingt wie Sie wirklich wollen, um Kapseln, die ein Wörterbuch wie dieses:
Dann können Sie tun:
Wenn Sie wollen in der Lage sein, um zu versuchen zu Holen eine Liste ohne einen neuen zu erstellen wenn es nicht existiert, könnte man hinzufügen, eine Methode, das zu tun.
Es ist wirklich nicht klingen, wie Sie müssen DynamicObject hier.