1. ホーム
  2. c#

[解決済み] プロジェクト・リファレンスにあるプロパティの定義をdynamicが含んでいない

2022-12-21 05:56:47

質問

というエラーが出ます。

'object' は 'Title' の定義を含んでいません。

は、すべてのコードが github

以下のようなConsoleApplication1があります。

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));
        }
    }
} 

ムービー.cs

public class Movie : DynamicObject
{
    public string PrintMovie(dynamic o)
    {
        return string.Format("Title={0} Rating={1}", o.Title, o.Rating);
    }
} 

を実行すると、同じプロジェクトでうまく動作しますが、ConsoleApplication1を参照してConsoleApplication2を追加し、まったく同じコードを追加すると、次のようになります。

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));
        }
    }
}

エラーが出ます。

'object'に'Title'の定義がありません**。

はダイナミックオブジェクトにあるにもかかわらず

  • o.Title 'o.Title' は 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' 型のダイナミック {Microsoft.CSharp.RuntimeBinder.RuntimeBinderException} 例外を投げました。

以下はスクリーンショットです。

私はこのようなことをしており、テストプロジェクトからムービー関数を呼び出そうとしています。

どのように解決するのですか?

ExpandoObjectを使用する必要があります。

 dynamic o = new ExpandoObject();
 o.Title = "Ghostbusters";
 o.Rating = "PG";

 Console.WriteLine(m.PrintMovie(o));