C# の厳密に型指定された性質に反していることは理解していますが、この言語で動的オブジェクトを操作する場合、JavaScript や PowerShell に通常見られるより便利な機能のいくつかは実用的ではないことがわかります。
たとえば、次の C# コードは実行時に失敗しますが、その理由は明らかです。
dynamic x = 1.0;
int y = x;
しかし、そのため、JSON ペイロードや CSV によって生成された緩やかな型指定のデータを扱う場合、C# の動的機能はかなり制限され、表現の微妙な違いによって実行時の動作が大きく異なる可能性があります。
私が探しているのは、VBA / VBScript 時代のVariant
タイプと同じように動作するものです。、などのDynamicObject
プリミティブ値をラップし、実行時に適切なキャストを実行するような型を派生させることは可能だと思います。動的コンテキストで「null」値を使用して同様のことを行いました。Int32
String
しかし、このようなものはすでに確立されていますか?私は GitHub や Codeplex を見回しましたが、役に立ちませんでしたが、検索するのはちょっと難しいです。非常に複雑なクラスになると思われる内容に取り掛かる前に、時間を無駄にしないようにしたいと思います。
このすべての実用性について
私は長い間、C# の動的ディスパッチの概念に抵抗していたことに注意してください。これは、動的言語を意図したものではなかったためです。正直なところ、言語にまったく追加されないか、少なくとも COM 相互運用シナリオに制限されないことを望みます。
しかし、そうは言っても、言語機能を「ハッキング」して、意図したことのないことを実行させる方法に常に興味があります。そこから有益なものが生まれることもあります。たとえば、IDisposable
インターフェイスとusing
ステートメントを使用して、リソースの解放とは関係のないことを行う人々の例がたくさんあります。
私はこれを実稼働アプリケーションや別の開発者に引き渡す必要があるもので使用するとは思えません。