私はこの質問に対する短い答えが "いいえ"だと思うが、C#4.0では実行時に動的キーワードの使用を検出する機能に興味がある。具体的にはメソッドのジェネリック型パラメータとして使用します。いくつかの背景を与えること実行時にタイプパラメータとして "dynamic"キーワードを使用することを検出
、我々は例えば、レスポンスをデシリアライズするときに使用しなければならないタイプを指定するには、typeパラメータを取る私たちのプロジェクトの数の間で共有ライブラリにRestClientクラスを持っている:
public IRestResponse<TResource> Get<TResource>(Uri uri, IDictionary<string, string> headers)
where TResource : new()
{
var request = this.GetRequest(uri, headers);
return request.GetResponse<TResource>();
}
残念ながら(タイプを簡潔にするためにここに入らない理由のために)、動的型を返すために型パラメータとしてdynamicを使用すると正しく動作しません - 私たちは、動的応答型を返すクラス:
public IRestResponse<dynamic> Get(Uri uri, IDictionary<string, string> headers)
{
var request = this.GetRequest(uri, headers);
return request.GetResponse();
}
しかし、最初のメソッドの型パラメータとしてdynamicを使用すると、実際の問題をマスクし、すべてのことを頭痛の種にする非常に奇妙なエラーが発生します。 APIを使用している他のプログラマーを助けるために、最初のメソッドでダイナミックの使用を検出して、コンパイルしないか、または使用したときに例外がスローされるようにしたい「動的応答タイプが必要な場合は、この他のメソッドを使用してください。
基本的には、次のいずれか
public IRestResponse<TResource> Get<TResource>(Uri uri, IDictionary<string, string> headers)
where TResource is not dynamic
または
public IRestResponse<TResource> Get<TResource>(Uri uri, IDictionary<string, string> headers)
where TResource : new()
{
if (typeof(TResource).isDynamic())
{
throw new Exception();
}
var request = this.GetRequest(uri, headers);
return request.GetResponse<TResource>();
}
は、これらのもののいずれかの可能性はありますか?私たちはVS2010と.Net 4.0を使用していますが、新しい言語機能を使用することができれば、将来の参照のために.Net 4.5ソリューションに興味があります。
実行時の 'TResource'は、ユーザが' dynamic'を指定したときに単に 'object'です。ユーザーは '
私はあなたのタイトルを編集しました。 「[質問には「タイトル内に「タグ」を含める必要がありますか」(http://meta.stackexchange.com/questions/19190/)」を参照してください。コンセンサスは「いいえ、そうすべきではありません」です。 –
@TimS。ええ