問題タブ [system.reflection]

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.

0 投票する
4 に答える
9478 参照

c# - 型でメソッドを取得する方法

指定: System.Type インスタンス。

目的は、新しく導入されたメソッド (正しい言葉がわかりません) を型に取得することです。これは、継承されず、オーバーライドされません。

.NET Reflection を使いたくて、そのType.GetMethods()方法を試してみました。ただし、継承およびオーバーライドされたものも返されました。

すべてのメソッドを取得した後、フィルタリングを考えました。MethodInfoそして、クラスによって公開されているプロパティ/メソッドを見ました。欲しいものを手に入れる方法がわかりませんでした。

例:私はクラスを持っています、 class A { void Foo() { } }

を呼び出すと、 、、およびのメソッドとtypeof(A).GetMethods()仲良くなります。のみにフィルタリングしたい。FooSystem.ObjectEqualsToStringGetTypeGetHashCodeFoo

誰もこれを行う方法を知っていますか?

ありがとう。

0 投票する
5 に答える
1642 参照

c# - リフレクションを使用して、C# で文字列配列を引数として受け取るメソッドを呼び出す方法

私は以下に示すような方法を持っています...

フレームワーク全体のセットアップ方法のため、Reflection を使用してこのメ​​ソッドを呼び出す必要があります。

ここに私がそれを呼び出すために使用しているコードがあります

これは、メソッド Fit.TcpConnector.MakeRequest が見つからないという MissingMethodException を返しています。

ただし、MakeRequest の署名を次のように変更すると、

それ以外の

その後、それは働いています。配列をパラメーターとして受け取る関数を呼び出す際に、誰かが私を正しい方向に向けることができますか?

0 投票する
4 に答える
10420 参照

c# - PropertyInfo をプロパティ式に変換し、それを使用してジェネリック メソッドを呼び出す方法は?

PropertyInfoメソッドの呼び出しに使用できるプロパティ式に変換するStructuralTypeConfiguration<TStructuralType>.Ignore<TProperty>(Expression<Func<TStructuralType, TProperty>> propertyExpression)方法は?

式の作成に使用しようとしましExpression.Property()たが、この式をpropertyExpressionパラメーターとして使用すると次のエラーが発生します。

The type arguments for method cannot be inferred from the usage. Try specifying the type arguments explicitly.

このエラーはおそらくTProperty、指定する方法がわからない型パラメーターを参照しているだけPropertyInfoです。

私はこれに関連してこれを行っています: Entity Framework の StructuralTypeConfiguration.Ignore() を使用して、指定された set 以外のすべてのプロパティを無視します

アップデート

動作しないコード:

0 投票する
1 に答える
184 参照

garbage-collection - オブジェクト名として文字列を使用して GC.GetGeneration() を呼び出すにはどうすればよいですか?

リフレクションを使用してクラスのすべてのフィールドを C# で取得していますが、クラスの各変数の GC Generation を取得したいと考えています。これどうやってするの?

これは可能ですか?ありがとう

0 投票する
1 に答える
207 参照

c# - リフレクションを使用して struct var メンバーに値を書き込むことはできませんが、クラスでは機能します

ここで、リフレクションを使用してクラス var メンバーに書き込む方法を stackoverflow で読んでいます。私は次のようなものを使用します:

これはクラスに対して機能しますが、myvar を読み取るときにクラスではなく Struct に対して同じことを行うと、常に 0 (int のデフォルトの構築値) になります。これは私が使用するコードです:

なぜこれが起こっているのか知っている人はいますか?

0 投票する
4 に答える
4635 参照

c# - オブジェクトのプロパティ値を別のオブジェクトに転送する

何よりも、私はAutoMapperについて知っていますが、使用したくありません。私はC#を学んでいて、その詳細を知りたいからです。だから私はこの問題(以下で説明)を自分でやろうとしています。

ただし、プロパティの名前とタイプが同じで、ソースから読み取り可能で、ターゲットで書き込み可能な場合、あるタイプのプロパティの値を別のタイプのプロパティに対処するプロパティコピーを作成しようとしています。type.GetProperties()メソッドを使用しています。サンプリングされたメソッドは次のとおりです。

それはうまくいきますが、私は SO で答えを読みましSystem.Reflection.Emitた。しかし、それ以上の説明やリンクはありませんでした。このコードを高速化する方法を理解するのを手伝ってくれませんか? または、 、、およびレイト バインド デリゲートに関するリンクをいくつか提案していただけますか? または、私が対象とするのに役立つと思うものはありますか?ILGeneratorEmitILGenerator

完全な質問:

@svickの回答から多くのことを理解し、学びました。しかし、これをオープン ジェネリック メソッドとして使用したい場合は、どうすればよいでしょうか。このようなもの:

または拡張子:

0 投票する
2 に答える
160 参照

c# - C# VS2010 のリフレクションでのパラメーター キャスト

署名Getdetails(int,string,bool)のメソッドのmethod.Invoke(objectname,object[]params)中に引数として文字列を渡すことはできますか? 渡す前にそれぞれの型にキャストする必要はありませんか?


リフレクションはキャストを処理しますか、またはこれを関数シグネチャに一致する適切なパラメーター型に動的にキャストする必要がありますか? 同じアプリケーションで異なる署名を持ついくつかのメソッドを呼び出しています。


したがって、シナリオは次のとおりです。

methodId をパラメーターの型と値とともに table に保存し、それらを取得してリフレクションを使用して呼び出します。しかし、TargetInvocationExceptionが発生するか、System.String を System.Int32 に変換できません。

0 投票する
2 に答える
997 参照

asp.net - WCFアプリから呼び出されたときにCompileAssemblyFromSourceで問題が発生する

メソッドを公開するWCFサービスがあります。クライアントがこのメソッドを呼び出すと、次のようになります。

  1. メソッドはいくつかの処理を行います
  2. アセンブリがすでに存在する場合は、アセンブリをロードしようとします
  3. 上記のdllが存在しない場合は、C#コードを生成し、CSharpCodeProviderのCompileAssemblyFromSourceAPIを使用してコンパイルします。
  4. 次に、生成されたばかりのアセンブリをロードします

今問題。このメソッドが最初に呼び出されたときは、ポイント3)でアセンブリが生成され、CompilerResults.CompiledAssemblyを介してアセンブリ参照を返そうとすると、ファイルが見つからないという例外がスローされます。ただし、アセンブリが指定された場所で生成されていることがはっきりとわかり、他のアプリケーションで開くことができます。

クライアントを介してメソッドを再度呼び出すと、アセンブリをロードでき(前の呼び出しの結果として正常に生成されました)、残りの一連のタスクを実行します。アセンブリがそこになく、アセンブリが生成されてすぐにロードされる場合にのみ、その例外が発生します。何か案は?web.configをいじって、偽装をtrue/falseに変更してみました。このWebアプリケーションを実行するための個別のアプリプールがあり、アプリプールのIDをローカルサービスからローカルシステムに変更しようとしました。管理者権限はあるが運がないWindowsログオンクレデンシャルも与えました。

どんな助けでも大歓迎です。

0 投票する
1 に答える
976 参照

c# - アセンブリをロードし、別の名前と拡張子でコピーします

最近、Reflection、Reflection.Emit、CodeDomを使い始めました。私のコーディングの目的は、アセンブリ( "C:\ Temp \ MyAssembly.exe"など)をロードし、そのクラスとメソッドを読み取ることです。これは実行されましたが、「MyAssembly.exe」のコピーを「MyAssembly.dll」に保存することに興味があります。その理由は、コードをインストルメント化し、メソッドにいくつかの変更を加えたいためです。新しいアセンブリを作成して保存する方法は知っていますが、拡張子が.exeから.dllの既存のアセンブリ(すべてのクラスとメソッドを含む)を「複製」できるかどうかはわかりません。

アドバイスをいただければ幸いです。ありがとう。ピーター

0 投票する
2 に答える
48740 参照

c# - 現在の関数の名前を取得するにはどうすればよいですか?

重複の可能性:
リフレクションを使用して、現在実行中のメソッドの名前を見つけることができますか?
C#コードから現在のメソッドの名前を取得する方法

例えば:

印刷:foo

C#でそれを行うことは可能ですか?