問題タブ [dnlib]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 動的型を返す、または受け入れるメンバーを識別する方法
メンバーの戻り値または引数の型が であるかどうかを判断する可能性はありますdynamic
か? 問題は、にコンパイルされることSystem.Object
です。
引数を受け入れるメンバーのdynamic
署名に型が存在する場合、追加の引数A_0
が追加されることを確認しました。
dynamic
型がリフレクションを使用していることを把握するためのトリックは他にありますか?
リフレクション ライブラリとしてdnlibを使用しています。このソリューションは、すべての dotnet プラットフォームで機能するはずです。ただし、.NET Core に限定されている場合は、大したことはありません。
私が取り組んでいるプロジェクトは、C# ライブラリ用の Markdown ドキュメント ジェネレーターです。ここで見つけることができます。
ご提案ありがとうございます。
アップデート
ジェネリック型引数の一部ではない型を識別するのは簡単です。
戻り値の型が動的な場合、メソッド/プロパティ ゲッター/プロパティ セッター/デリゲート/イベント アダーは、シグネチャに と呼ばれる追加の引数を持ちますA_0
。
引数が動的な場合は、カスタム属性で装飾されます: System.Runtime.CompilerServices.DynamicAttribute
.
ただし、動的型が何らかのジェネリック型 ( Dictionary<object, dynamic>
) の引数である場合、ジェネリック引数型はいずれも上記のカスタム属性で装飾されません。指定されたジェネリック型がメンバーによって返される場合、追加の引数がメンバーの署名に存在します。ジェネリック型が引数の場合も同様で、カスタム属性で装飾されます。
これらのインジケーターは、ジェネリック型に引数が 1 つしかないか、他のobject
型引数がない場合にのみ、確実に使用できます。
<object, dynamic>
良くないですよ<int, dynamic>
わかった<dynamic>
わかった
追加の引数もカスタム属性も、どのジェネリック引数が動的であるかを示しません。
これまでのところ、この問題の解決策は見当たりません。