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?

InformationsquelleAutor Usman | 2010-07-22
Schreibe einen Kommentar