I am try to add a dynamic method to ExpandoObject which would return the properties (added dynamically) to it, however it's always giving me error.
Is something wrong I am doing here?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Dynamic;
namespace DynamicDemo
{
class ExpandoFun
{
public static void Main()
{
Console.WriteLine("Fun with Expandos...");
dynamic student = new ExpandoObject();
student.FirstName = "John";
student.LastName = "Doe";
student.Introduction=new Action(()=>
Console.WriteLine("Hello my name is {0} {1}",this.FirstName,this.LastName);
);
Console.WriteLine(student.FirstName);
student.Introduction();
}
}
}
The Compiler is flagging the following error: Error 1
Keyword 'this' is not valid in a static property, static method, or static field initializer
D:\rnd\GettingStarted\DynamicDemo\ExpandoFun.cs 20 63 DynamicDemo
Well, you're using this
in the lambda, which would refer to the object that is creating the Action
. You cannot do that because you're in a static method.
Even if you were in an instance method, it would not work with this
because it would refer to the instance of the object creating the Action
, not the ExpandoObject
where you're tucking it.
You need to reference the ExpandoObject (student):
student.Introduction=new Action(()=>
Console.WriteLine("Hello my name is {0} {1}",student.FirstName,student.LastName);
);