3

C# の厳密に型指定された性質に反していることは理解していますが、この言語で動的オブジェクトを操作する場合、JavaScript や PowerShell に通常見られるより便利な機能のいくつかは実用的ではないことがわかります。

たとえば、次の C# コードは実行時に失敗しますが、その理由は明らかです。

dynamic x = 1.0;
int y = x;

しかし、そのため、JSON ペイロードや CSV によって生成された緩やかな型指定のデータを扱う場合、C# の動的機能はかなり制限され、表現の微妙な違いによって実行時の動作が大きく異なる可能性があります。

私が探しているのは、VBA / VBScript 時代のVariantタイプと同じように動作するものです。、などのDynamicObjectプリミティブ値をラップし、実行時に適切なキャストを実行するような型を派生させることは可能だと思います。動的コンテキストで「null」値を使用して同様のことを行いました。Int32String

しかし、このようなものはすでに確立されていますか?私は GitHub や Codeplex を見回しましたが、役に立ちませんでしたが、検索するのはちょっと難しいです。非常に複雑なクラスになると思われる内容に取り掛かる前に、時間を無駄にしないようにしたいと思います。

このすべての実用性について

私は長い間、C# の動的ディスパッチの概念に抵抗していたことに注意してください。これは、動的言語を意図したものではなかったためです。正直なところ、言語にまったく追加されないか、少なくとも COM 相互運用シナリオに制限されないことを望みます。

しかし、そうは言っても、言語機能を「ハッキング」して、意図したことのないことを実行させる方法に常に興味があります。そこから有益なものが生まれることもあります。たとえば、IDisposableインターフェイスとusingステートメントを使用して、リソースの解放とは関係のないことを行う人々の例がたくさんあります。

私はこれを実稼働アプリケーションや別の開発者に引き渡す必要があるもので使用するとは思えません。

4

1 に答える 1

4

Visual Basic 言語は多くの接着剤を隠していますが、それは C# のやり方ではありません。Variant 型には多数の変換関数があり、vb ランタイムによって自動的に呼び出されます。.NET にも自動変換関数があり、明示的に使用する必要があります。

dynamic x = 1.0;
int y = Convert.Int32(x);

C# はコストを隠す言語ではないため、そのようなコードを書かなければならないという正当な理由があります。

于 2012-05-25T19:16:30.413 に答える