I am getting an error that says:
'object' does not contain a definition for 'Title'
all the code is also on github
I have a ConsoleApplication1 that looks like this
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Movie m = new Movie();
var o = new { Title = "Ghostbusters", Rating = "PG" };
Console.WriteLine(m.PrintMovie(o));
}
}
}
and Movie.cs
public class Movie : DynamicObject
{
public string PrintMovie(dynamic o)
{
return string.Format("Title={0} Rating={1}", o.Title, o.Rating);
}
}
it works fine from the SAME project, but if I add ConsoleApplication2 with a reference to ConsoleApplication1 and add the Exact same code
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Movie m = new Movie();
var o = new { Title = "Ghostbusters", Rating = "PG" };
Console.WriteLine(m.PrintMovie(o));
}
}
}
I get an error:
'object' does not contain a definition for 'Title'**
even though it is in the dynamic object.
- o.Title 'o.Title' threw an exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' dynamic {Microsoft.CSharp.RuntimeBinder.RuntimeBinderException}
Here is a screen shot:
I am doing something like this and trying to call the movie function from a test project.
Best Answer
Jahamal's answer doesn't say why you get the error. The reason is that the anonymous class is
internal
to the assembly. Keyworddynamic
doesn't allow you to bypass member visibility.The solution is to replace the anonymous class with named public class.
Here's another good example explaining the reason and another possible solution.