問題タブ [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.
c# - 型でメソッドを取得する方法
指定: System.Type インスタンス。
目的は、新しく導入されたメソッド (正しい言葉がわかりません) を型に取得することです。これは、継承されず、オーバーライドされません。
.NET Reflection を使いたくて、そのType.GetMethods()
方法を試してみました。ただし、継承およびオーバーライドされたものも返されました。
すべてのメソッドを取得した後、フィルタリングを考えました。MethodInfo
そして、クラスによって公開されているプロパティ/メソッドを見ました。欲しいものを手に入れる方法がわかりませんでした。
例:私はクラスを持っています、
class A { void Foo() { } }
を呼び出すと、 、、およびのメソッドとtypeof(A).GetMethods()
仲良くなります。のみにフィルタリングしたい。Foo
System.Object
Equals
ToString
GetType
GetHashCode
Foo
誰もこれを行う方法を知っていますか?
ありがとう。
c# - リフレクションを使用して、C# で文字列配列を引数として受け取るメソッドを呼び出す方法
私は以下に示すような方法を持っています...
フレームワーク全体のセットアップ方法のため、Reflection を使用してこのメソッドを呼び出す必要があります。
ここに私がそれを呼び出すために使用しているコードがあります
これは、メソッド Fit.TcpConnector.MakeRequest が見つからないという MissingMethodException を返しています。
ただし、MakeRequest の署名を次のように変更すると、
それ以外の
その後、それは働いています。配列をパラメーターとして受け取る関数を呼び出す際に、誰かが私を正しい方向に向けることができますか?
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 以外のすべてのプロパティを無視します。
アップデート
動作しないコード:
garbage-collection - オブジェクト名として文字列を使用して GC.GetGeneration() を呼び出すにはどうすればよいですか?
リフレクションを使用してクラスのすべてのフィールドを C# で取得していますが、クラスの各変数の GC Generation を取得したいと考えています。これどうやってするの?
これは可能ですか?ありがとう
c# - リフレクションを使用して struct var メンバーに値を書き込むことはできませんが、クラスでは機能します
ここで、リフレクションを使用してクラス var メンバーに書き込む方法を stackoverflow で読んでいます。私は次のようなものを使用します:
これはクラスに対して機能しますが、myvar を読み取るときにクラスではなく Struct に対して同じことを行うと、常に 0 (int のデフォルトの構築値) になります。これは私が使用するコードです:
なぜこれが起こっているのか知っている人はいますか?
c# - オブジェクトのプロパティ値を別のオブジェクトに転送する
何よりも、私はAutoMapperについて知っていますが、使用したくありません。私はC#を学んでいて、その詳細を知りたいからです。だから私はこの問題(以下で説明)を自分でやろうとしています。
ただし、プロパティの名前とタイプが同じで、ソースから読み取り可能で、ターゲットで書き込み可能な場合、あるタイプのプロパティの値を別のタイプのプロパティに対処するプロパティコピーを作成しようとしています。type.GetProperties()
メソッドを使用しています。サンプリングされたメソッドは次のとおりです。
それはうまくいきますが、私は SO で答えを読みましSystem.Reflection.Emit
た。しかし、それ以上の説明やリンクはありませんでした。このコードを高速化する方法を理解するのを手伝ってくれませんか? または、 、、およびレイト バインド デリゲートに関するリンクをいくつか提案していただけますか? または、私が対象とするのに役立つと思うものはありますか?ILGenerator
Emit
ILGenerator
完全な質問:
@svickの回答から多くのことを理解し、学びました。しかし、これをオープン ジェネリック メソッドとして使用したい場合は、どうすればよいでしょうか。このようなもの:
または拡張子:
c# - C# VS2010 のリフレクションでのパラメーター キャスト
署名Getdetails(int,string,bool)のメソッドのmethod.Invoke(objectname,object[]params)中に引数として文字列を渡すことはできますか? 渡す前にそれぞれの型にキャストする必要はありませんか?
リフレクションはキャストを処理しますか、またはこれを関数シグネチャに一致する適切なパラメーター型に動的にキャストする必要がありますか? 同じアプリケーションで異なる署名を持ついくつかのメソッドを呼び出しています。
したがって、シナリオは次のとおりです。
methodId をパラメーターの型と値とともに table に保存し、それらを取得してリフレクションを使用して呼び出します。しかし、TargetInvocationExceptionが発生するか、System.String を System.Int32 に変換できません。
asp.net - WCFアプリから呼び出されたときにCompileAssemblyFromSourceで問題が発生する
メソッドを公開するWCFサービスがあります。クライアントがこのメソッドを呼び出すと、次のようになります。
- メソッドはいくつかの処理を行います
- アセンブリがすでに存在する場合は、アセンブリをロードしようとします
- 上記のdllが存在しない場合は、C#コードを生成し、CSharpCodeProviderのCompileAssemblyFromSourceAPIを使用してコンパイルします。
- 次に、生成されたばかりのアセンブリをロードします
今問題。このメソッドが最初に呼び出されたときは、ポイント3)でアセンブリが生成され、CompilerResults.CompiledAssemblyを介してアセンブリ参照を返そうとすると、ファイルが見つからないという例外がスローされます。ただし、アセンブリが指定された場所で生成されていることがはっきりとわかり、他のアプリケーションで開くことができます。
クライアントを介してメソッドを再度呼び出すと、アセンブリをロードでき(前の呼び出しの結果として正常に生成されました)、残りの一連のタスクを実行します。アセンブリがそこになく、アセンブリが生成されてすぐにロードされる場合にのみ、その例外が発生します。何か案は?web.configをいじって、偽装をtrue/falseに変更してみました。このWebアプリケーションを実行するための個別のアプリプールがあり、アプリプールのIDをローカルサービスからローカルシステムに変更しようとしました。管理者権限はあるが運がないWindowsログオンクレデンシャルも与えました。
どんな助けでも大歓迎です。
c# - アセンブリをロードし、別の名前と拡張子でコピーします
最近、Reflection、Reflection.Emit、CodeDomを使い始めました。私のコーディングの目的は、アセンブリ( "C:\ Temp \ MyAssembly.exe"など)をロードし、そのクラスとメソッドを読み取ることです。これは実行されましたが、「MyAssembly.exe」のコピーを「MyAssembly.dll」に保存することに興味があります。その理由は、コードをインストルメント化し、メソッドにいくつかの変更を加えたいためです。新しいアセンブリを作成して保存する方法は知っていますが、拡張子が.exeから.dllの既存のアセンブリ(すべてのクラスとメソッドを含む)を「複製」できるかどうかはわかりません。
アドバイスをいただければ幸いです。ありがとう。ピーター
c# - 現在の関数の名前を取得するにはどうすればよいですか?
重複の可能性:
リフレクションを使用して、現在実行中のメソッドの名前を見つけることができますか?
C#コードから現在のメソッドの名前を取得する方法
例えば:
印刷:foo
C#でそれを行うことは可能ですか?