dynamic unknownVariable; unknownVariable = "this is message"; Console.WriteLine(unknownVariable); unknownVariable = DateTime.Now; Console.WriteLine(unknownVariable);
Jeżeli zdarzy nam się, że na przykład do daty z powyższego kodu będziemy chcieli dodać liczbę, co nie jest dozwolonym działaniem, nie otrzymamy błędu kompilacji, ale wyjątek typu RuntimeBinderException, o którym dokumentacja MSDN mówi, że:
Represents an error that occurs when a dynamic bind in the C# runtime binder is processed.Kolejnym ciekawym typem wykorzystywanym do dynamicznego typowania jest ExpandoObject. Obiekty takie pozwalają na dynamiczne typowanie pól obiektu, co znane jest z innych języków programowania, takich jak np. JavaScript.
dynamic expando = new ExpandoObject(); expando.val1 = "Another silly message"; expando.count = 911; expando.Pi = 3.14; foreach (var prop in expando) { Console.WriteLine(prop.GetType()); Console.WriteLine(prop); }
Powyższy kod wypisze na konsoli następujące rzeczy:
Zatem widzimy, że ExpandoObject jest odpowiednim słownikiem, umożliwiającym składowanie obiektów dowolnego typu, ze względu na to, że w C# wszystko pochodzi od klasy object.
Aby pobrać pojedynczą wartość, wystarczy zrzutować obiekt dynamicznie typowany do słownika.
var singleValue = ((IDictionary<string, object>) expando)["val1"];
Brak komentarzy:
Prześlij komentarz