53

私は、C# 4.0 に付属するすべての新しい利点を学ぼうとしています。DynamicObjectExpandoObjectタイプの違いがよくわかりません。DynamicObjectたとえば、Python スクリプトから変数にアクセスする場合やExpandoObject、COM/Office オブジェクトと対話する場合に使用されるようです。私は正しいですか?それらの使用の違いは何ですか?

4

1 に答える 1

97

Expandoは、 dynamic実行時にメンバーを追加 (または削除) できる型です。dynamicは、Python や JavaScript などの動的型付け言語とやり取りするときに、.NET が型と相互運用できるように設計されています。

したがって、動的な型を処理する必要がある場合は使用dynamicし、XML や JSON などの動的データを処理する必要がある場合は ExpandoObject を使用します。

expando の宣言は、ダイナミックと expando の関係を示しています。

dynamic expando = new ExpandoObject();

新しいプロパティを追加する機能:

expando.SomeNewStringVal = "Hello World!";

コードの最後の行は、expando オブジェクトに という新しい文字列プロパティを作成しますSomeNewStringVal。文字列型は割り当てから推測されます。

したがって、expando は、動的に変化するデータを表すことができる動的データ型です。一言でいうと以上です。dynamic と expando について詳しく見てみましょう

完全な例:

using System;
using System.Dynamic;

class Program
{
    static void Main(string[] args)
    {
        dynamic expando = new ExpandoObject();
        expando.SomeNewStringVal = "Hello Brave New Whirrled!";
        Console.WriteLine(expando.SomeNewStringVal);

        // more expando coolness/weirdness:
        var p = expando as IDictionary<String, object>;
        p["A"] = "New val 1";
        p["B"] = "New val 2";

        Console.WriteLine(expando.A);
        Console.WriteLine(expando.B);
    }
}
于 2010-08-22T05:24:21.987 に答える