web-dev-qa-db-ja.com

C#4.0ダイナミックvsエキスパンド...どこに適合しますか?

私は、C#4.0に付属するすべての新しい利点を学習しようとしています。 DynamicObject型とExpandoObject型の違いを理解できていません。 DynamicObjectが使用されているようです。 PythonスクリプトとExpandoObject)から変数にアクセスする場合、COM/Officeオブジェクトと通信するとき、私は正しいですか?使用法の違いは何ですか?

49
Perpetualcoder

Expandois adynamic実行時にメンバーを追加(または削除)できるタイプdynamic PythonやJavaScriptなどの動的タイピング言語とインターフェースするときに、.NETがタイプと相互運用できるように設計されています。

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

エキスパンドの宣言は、ダイナミックとエキスパンドの関係を示しています。

dynamic expando = new ExpandoObject();

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

expando.SomeNewStringVal = "Hello World!";

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

したがって、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);
    }
}
89
Paul Sasik