Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Keyword 'this' is not valid in a static property, static method, or static field initializer" when adding methods to an ExpandoObject

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

like image 981
humblecoder Avatar asked Dec 27 '10 07:12

humblecoder


1 Answers

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);
);
like image 182
R. Martinho Fernandes Avatar answered Oct 13 '22 17:10

R. Martinho Fernandes