問題タブ [parameterinfo]
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# - ParameterInfoがジェネリック型であるかどうかを判断する方法は?
MethodInfo
GenericMethodDefinitionがあります。例:CallMethod<T>(T arg, string arg2)
。GetParameters()メソッドは2つのParameterInfoオブジェクトを提供します。最初のオブジェクトは汎用であり、2番目のオブジェクトはそうではありません。ParameterInfoを取得して、それが汎用であることを通知するにはどうすればよいですか?制約がある場合はどうですか?
dynamic - C# を使用して、実行時にパラメーター、プロパティ、および戻り値の型を読み取る 1 つの方法
以前のスレッドUsing Reflection read properties of an object containing array of another objectに続きます。EvgK のこの素晴らしいメソッドを、私のコード ベースの複数の場所で使用できる汎用メソッドにしたいと考えています。
繰り返しますが、ユーザーから渡されたメソッドを読み取ろうとしています。パラメータ、そのプロパティ、および値をリストします。ユーザーが入力値を提供したら、メソッドを動的に呼び出して結果オブジェクトを取得します。結果は GetMyProperties() メソッドに渡され、メソッドはすべてのプロパティ (n レベルまで) - 名前、値、および型をリストします。
現在、2 つの方法があります (以下の定義)。
最初のものを使用して、選択したメソッドのすべてのパラメーターのリストとそのプロパティ (名前、値、および型) を表示します。
..ユーザーがパラメーターを入力できるように、プロパティのリストを作成します。カスタム タイプかどうかの ParameterType および GetProperties メソッド チェックに合格します。カスタムタイプの場合、入力用のグリッドにバインドするリストを作成するために、タイプを使用して再帰的に呼び出します。
2 番目のメソッド GetMyProperties(object obj) は、返されるオブジェクトを一覧表示するために使用されます。コンパイル時に選択したメソッドの戻り値の型がわからないため、オブジェクト型を使用します。2 番目のメソッドを何らかの方法で変更して、パラメーター、プロパティ、および戻り値の型を読み取るために使用できるかどうかを知りたいですか? 別々の方法を持つ代わりに?コードの再利用を試みています。
c# - 可変数のパラメーターを持つ関数の ParameterInfo を取得する方法は?
可変数のパラメーターを持つ関数の ParameterInfo を取得する方法は? 問題は、メソッドを呼び出すときです
sendData の parameterInfo は取得できますが、o1 および o2 オブジェクトは取得できません。
助けてくれてありがとう。
アルノー
c# - C#でリフレクションを使用してメソッドを呼び出すときに、パラメータの自動型変換を行う方法は?
C# を使用して、リフレクションを通じて型のメソッドを呼び出す必要があります。
実行時に、データは名前と値のペアを含む Dictionary で構成されます。Dictionary 内の名前は、呼び出すメソッドのパラメーター名に対応します。また、実行時に、任意のアセンブリ修飾型名とメソッド名を持ちます。設計時には、メソッドが int、string、DateTime、bool、int[]、string[]、DateTime[]、または bool 型の可変数のパラメーターを受け入れること以外に、型とメソッドについての知識はありません。 []。
リフレクションを使用して型のインスタンスを作成し、メソッドを呼び出すことができるようになるまで問題はありません。呼び出すときに、辞書内の文字列値をメソッドで必要な適切な型に変換する必要がある時点で立ち往生しています。
おそらく MethodInfo.GetParameters() を介して列挙し、各パラメーターの型変換を実行する必要があることはわかっています。私が理解しようとしているのは、これを行う方法、そして理想的には効率的に行う方法です。
私のこれまでの調査では、フォームの値を ActionMethod に渡すときに MVC ソース コードが同様のことを行うため、MVC ソース コードを掘り下げました。ActionMethodDispatcherを見つけましたが、慣れていない LINQ 式を使用しています。
SOに関する同様の質問も見ましたが、私の質問に答えるものは見つかりませんでした。
解決策への指針を歓迎します。
c# - メソッドパラメータに値を代入
次のシグネチャを持つメソッドを想像してください。
の値に応じて、 の値を、、または何もdata
割り当てない必要があります。要するに、もしそうならA
B
C
id
id == "A"
A = data;
問題は、このメソッドの本体が人間によって型付けされているのに、署名が実行時に生成されることです。このため、設計時に ref パラメーターがいくつあり、それらが何と呼ばれるかが不明であるため、ロジックをハードコーディングすることはできません。このコード片は、任意の数のメソッドに挿入でき、それぞれが異なる署名を持つ可能性があり、すべてのメソッドで機能する必要があります。
現在使用されているメソッドのすべてのパラメーターを取得する方法は知っていますが、これらのパラメーターの 1 つに値を割り当てる方法がわかりません。私が探しているのは、次のようなものです。
c# - ParameterInfoが戻りパラメーターであるかどうかを判別する方法
ParameterInfo
aがリターンパラメータであるかどうかをどのように判断できますか?
以下に関数を書きましたが、何かが足りないのではないかと心配しています。
私はこれをいくつかの仮定に基づいていますが、これには欠陥がある可能性があります。(1)パラメーターはMethodInfo
、ConstructorInfo
またはPropertyInfo
(インデクサー)であるメンバーで宣言されます。(2)ConstructorInfo
そしてPropertyInfo
returnパラメータを持つことはありません。
c# - メソッドのParameterInfoプロパティ、属性、およびoutrefパラメーター
さて、私はParameterInfo
クラスのプロパティに混乱しています。
残念ながら、ドキュメントはあまり明確ではありません。例ではメソッドの作成方法を示していますが、C#でのこれらのメソッドの外観は示していません。
誰かがこれらのプロパティについてもっと話すことができます:
DefaultValue
HasDefaultValue
IsIn
IsLcid
IsOptional
IsOut
IsRetval
そして、どの組み合わせがどのメソッドパラメータにつながるか。
次の出力を提供する簡単なプログラムを作成しました。
メソッド名 void M1(object param)
M1IL
署名:.method public hidebysig instance void M1(object param) cil managed
メソッドパラメーターの説明:
参照によって渡されますFalse
HasDefaultValue = False
IsIn = False
IsLcid = False
IsOptional = False
IsOut = False
IsRetVal =False
メソッド名 void M2(object param = null)
M2IL
署名.method public hidebysig instance void M2([opt] object param) cil managed
メソッドパラメーターの説明:
参照によって渡されますFalse
HasDefaultValue = True
DefaultValue = null
IsIn = False
IsLcid = False
IsOptional = True
IsOut = False
IsRetVal =False
メソッド名 void M3(out object param)
M3IL
署名.method public hidebysig instance void M3([out] object& param) cil managed
メソッドパラメーターの説明:参照によって
渡されるTrue
HasDefaultValue = False
IsIn = False
IsLcid = False
IsOptional = False
IsOut = True
IsRetVal =False
メソッド名 void M4(ref object param)
M4IL
シグネチャ.method public hidebysig instance void M4(object& param) cil managed
メソッドパラメータの説明:参照によって
渡されますTrue
HasDefaultValue = False
IsIn = False
IsLcid = False
IsOptional = False
IsOut = False
IsRetVal=False
メソッド名 void M5([In] object param)
M5IL
シグネチャ.method public hidebysig instance void M5([in] object param) cil managed
メソッドパラメーターの説明:
参照によって渡されますFalse
HasDefaultValue = False
IsIn = True
IsLcid = False
IsOptional = False
IsOut = False
IsRetVal =False
メソッド名 void M6([Out] object param)
M6IL
シグネチャ.method public hidebysig instance void M6([out] object param) cil managed
メソッドパラメーターの説明:
参照によって渡される
FalseHasDefaultValue= False
IsIn = False
IsLcid = False
IsOptional = False
IsOut = True
IsRetVal =False
メソッド名 void M7([Out] out object param)
M7IL
シグネチャ.method public hidebysig instance void M7([out] object& param) cil managed
メソッドパラメーターの説明:参照によって
渡されるTrue
HasDefaultValue = False
IsIn = False
IsLcid = False
IsOptional = False
IsOut = True
IsRetVal =False
メソッド名 void M8([DefaultValue(null)] object param)
M8IL
シグネチャ.method public hidebysig instance void M8(object param) cil managed
メソッドパラメーターの説明:
参照によって渡されますFalse
HasDefaultValue = False
IsIn = False
IsLcid = False
IsOptional = False
IsOut = False
IsRetVal=False
メソッド名M9 void M9([DefaultValue(-10)] int param = 10)
ILシグネチャ.method public hidebysig instance void M9([opt] int32 param) cil managed
メソッドパラメータの説明:
パラメータ名param
は参照によって渡されますFalse
HasDefaultValue = True
DefaultValue = 10
IsIn = False
IsLcid = False
IsOptional = True
IsOut = False
IsRetVal =False
メソッド名 void M10([Optional] int param)
M10IL
シグネチャ.method public hidebysig instance void M10([opt] int32 param) cil managed
メソッドパラメータの説明:
参照によって渡されますFalse
HasDefaultValue = False
IsIn = False
IsLcid = False
IsOptional = True
IsOut = False
IsRetVal = False
と思いますIn
が、属性はSystem.Runtime.InteropServicesのnamesapceにあるため、COMに関連しています。
しかし、やはりドキュメントはかなり貧弱です。:(Out
Optional
そして、RetValとは何ですか?それはどこで使用されますか?
.net - ParameterInfo.IsOptional と ParameterInfo.HasDefaultValue の違いは?
どちらも同じように聞こえます。msdn から:
このパラメーターが省略可能かどうかを示す値を取得します。
このメソッドは、オプションのメタデータ フラグに依存します。このフラグはコンパイラによって挿入できますが、コンパイラはそうする義務はありません。
このメソッドは、ParameterAttributes 列挙子の Optional フラグを利用します。
ParameterInfo.HasDefaultValue (.NET 4.5 の新機能)
このパラメーターに既定値があるかどうかを示す値を取得します。
それらは同じではありませんか?簡単なテストを行いました:
私が書いた:
では、それらはどのような文脈で異なるのでしょうか? BCLHasDefaultValue
が .NET 4.5 で新たに導入されたのはなぜですか?
c# - パラメータが渡されたラムダで使用されるメソッド名を取得する方法
AssertManager.Record のパラメーターは動作中ですが、アサートであるラムダ アクション内の値が必要です。そのため、あるクラスから別のクラスに渡した、使用したアサーションのタイプを取得する必要があります。特定の理由でラムダ式を使用したため、編集できません。私が行ったアサーションのタイプを示す文字列タイプが必要です。私の例では、「Assert.True」または「Assert.Equal」をコンソールに出力する必要があります。
私が使用するサンプルコードは次のとおりです。
これに対する解決策があれば教えてください。ありがとうございました。