プロジェクトの[Dependencies]ノードを右クリックし、[Nuget Packagesを管理]> [参照]をクリックし、検索ボックスに「dynamic」と入力します。リストの一番上からSystem.Dynamic.Runtime
を選択すると、ソースコードにdynamic
を使用できるようになりました。
あなたは私のようなあなたがメソッドのコードでDLRライブラリを参照せずdynamic
キーワードを使用することができますが、プロパティの宣言では、読書を保つことができない理由の理由に興味を持っていた場合。
NETStandard.Libraryを使用してコンパイルしている以下のC#コードの行を参照して、System.Dynamic.Runtime
を参照しないでください。以下のC#コードの行1と行3の主な違いは、キーワードdynamic vs varまたは動的対static型の使用です。
Line 1: dynamic a = new {a = 1, b = 2};
Line 2: a = new Class1();
Line 3: var b = new { a = 1, b = 2 };
ここでは、参照用に同じ3行の簡略化されたILがあります。
Line 1: newobj instance void class '<>f__AnonymousType0`2'<int32,int32>::.ctor(!0,!1)
Line 2: newobj instance void ClassLibrary2.Class1::.ctor()
Line 3: newobj instance void class '<>f__AnonymousType0`2'<int32,int32>::.ctor(!0,!1)
あなたはまったく違いを見つけません結果のILコードの1行目と3行目を比較した場合。コンパイラは、type of the variableを初期化コードから推測し、異なる変数に対して同じ変数を再初期化することができます。このシナリオでDLRに依存する必要はありません。
一方、クラスのautoプロパティをdynamic
と宣言すると、全く異なるものが発生します。
public class Class1 { public dynamic Test { get; set; } }
自動性のILコードは、タイプobject
のプライベートバッキングフィールドならびに高濃度からSystem.Runtime.CompilerServices.DynamicAttribute
に依存している初期のコード、ゲッターとセッターに変換されるdynamic
性を明らかにするSystem.Dynamic.Runtime
この場合はDLRへの依存関係を持ちます。
私は、.net標準1.6ライブラリを使用しています。余分なリファレンスはありません... – Gusman
どのバージョンのVisual Studioおよび/またはC#コンパイラを使用していますか? –
@EugeneKomisarenko VS 2017ですが、コンパイラのバージョンはどうやって見つかりますか? – Detilium