public void Invoke_Method_of_an_ExpandoObject()
        {
            dynamic dyn = new ExpandoObject();
            dyn.Foo = new Func<string>(() => "bar");

            var interpreter = new Interpreter()
                .SetVariable("dyn", dyn);

            Assert.AreEqual(dyn.Foo(), interpreter.Eval("dyn.Foo()"));
        }
Exemple #2
0
        //Add event to instance
        public static void ExpandoObjectTest()
        {
            dynamic sampleObject = new ExpandoObject();

            // Create a new event and initialize it with null.
            sampleObject.sampleEvent = null;

            // Add an event handler.
            sampleObject.sampleEvent += new EventHandler(SampleHandler);

            // Raise an event for testing purposes.
            sampleObject.sampleEvent(sampleObject, new EventArgs());

            //Passing As a Parameter
            dynamic employee, manager;

            employee      = new ExpandoObject();
            employee.Name = "John Smith";
            employee.Age  = 33;

            manager          = new ExpandoObject();
            manager.Name     = "Allison Brown";
            manager.Age      = 42;
            manager.TeamSize = 10;


            Func <int, int> func = x => 2 * x;

            manager.Foo = func;
            int i = manager.Foo(123); // now you see it

            manager.Foo = null;       // now you don't

            WritePerson(manager);
            WritePerson(employee);


            //Enumerating and Deleting Members
            foreach (var property in (IDictionary <String, Object>)employee)
            {
                Console.WriteLine(property.Key + ": " + property.Value);
            }
            // This code example produces the following output:
            // Name: John Smith
            // Age: 33

            //In languages that do not have syntax for deleting members (such as C# and Visual Basic), you can delete a member by implicitly casting an instance of the ExpandoObject to the IDictionary<String, Object> interface and then deleting the member as a key/value pair. This is shown in the following example.
            ((IDictionary <String, Object>)employee).Remove("Name");
        }