問題タブ [propertyinfo]
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# - .NET PropertyInfo の等価性
2 つの PropertyInfo を Equals() と比較するコードがいくつかあります。これは通常は機能しているように見えますが、同じ基本プロパティの 2 つの反映されたプロパティ情報オブジェクトが等しくないという奇妙な状況に遭遇しました。
PropertyInfo は実際には Equals() を実装していないように見えますが、.NET は反映されたメンバーをキャッシュして、常に同じインスタンスが返されるようにしていると思いました。確かに a.GetType() == b.GetType() が常に表示されます。これは PropertyInfos の場合ではありませんか?
その他の注意事項: - この奇妙な現象は、.NET 4、VS2012、x86 ビルド ターゲットで NUnit テストを実行したときに発生しました - これは、この方法で比較したすべてのプロパティで発生するわけではありませんが、1 つのプロパティで一貫して失敗します。
誰でもこの動作を説明できますか?
編集: 誰かが興味を持っている場合に備えて、MemberInfos を比較するために私が書いた EqualityComparison 関数を次に示します。
c# - PropertyInfo.GetValue(object obj、object [] index)throwing'Target'例外
List<T>
拡張検索メカニズムを備えた汎用リストが必要なので、追加のインデクサーを使用して汎用リスト(ベース)を作成しました。したがって、この場合、Tがオブジェクトの場合、リストはフィールドに基づいてアイテムをフェッチすることを許可します。これがサンプルコードです
そして私のジェネリックリスト
しかし、プロパティの値を取得できません。その値は「ターゲット例外」をスローします。
これを解決するのを手伝ってください。
c# - 指定された名前の DataMemberAttribute を持つプロパティを取得する方法は?
指定された名前の DataMember を持つプロパティを反射的に取得するにはどうすればよいですか (すべての DataMember に一意の名前があると仮定しましょう)。たとえば、次のコードでは、「p1」という名前の DataMember を持つプロパティは次のとおりですPropertyOne
。
現在、私は持っています:
これは機能しますが、改善できるように感じます。GetCustomAttributes()
私は特にそれが2回呼び出されるのが好きではありません。
どうすればもっとうまく書き直すことができますか?理想的には、シンプルなワンライナーにできれば最高です。
android - Android アプリから Web サービスを呼び出すと null オブジェクトが返される
KSOAP を使用して Web サービスと通信する Android アプリを作成しています。Web サービスを呼び出して戻り値 (こんにちは) を取得できるため、Web サービスと Android アプリ間の接続は機能しています。しかし、アプリから .addProperty を介して Web サービスに名前を付けようとすると、Web サービスは null オブジェクトを返します。
これが私のコードです:
主な活動:
ウェブサーバー:
あなたが私を助けてくれることを願っています!
c# - PropertyInfo GetCustomAttributes が 0 個のオブジェクトを返す
ここで質問するのはこれが初めてですが、ご容赦ください。オブジェクトにアトリビュートをアタッチする方法を学ぼうとしていますが、それらを取得できません。だからここに私の属性クラスがあります:
オブジェクトの 1 つのプロパティに「アタッチ」する方法のサンプル:
そして、現在属性を取得している方法のコード:
私もこのフォーマットを試しました
どちらも 0 オブジェクトを返します。それで、何が起こっているのか本当にわかりませんか?
前もって感謝します。
c# - PropertyInfo.PropertyType からの型を持つジェネリック クラス インスタンス
私は以下のようなクラスを持っています:
そして、私はそれらをこのように使いたい:
私が抱えている問題は次のとおりです。「MyClass」のタイプは、Reflectionを使用してPropertyInfoインスタンスからのみ取得できるため、
これどうやってするの?何か案は?
アップデート。 Type をジェネリック メソッドに渡そうとしています。そして、はい、これは私が欲しいものです。
android - KSOAPとWebサーバー通信(PropertyInfo)
そこで、Webサービスに接続する必要のあるAndroidアプリを開発しています。この接続は正常に機能しています。「HelloChristian」を返す簡単なメソッドを使用してテストしました。これはアプリで正しく表示されます。パラメータ(名前)を使用してこれを実行しようとすると、「Hellonull」が返されます。
技術的には、Android4.2.2とKSOAP2.6.5を使用しています。WebサービスはOracleWebLogicv12で実行されています。私のソースコードに従う:
私は2つの方法でpropertyInfoを追加しようとしました。最初に単純なrequest.addPropertyを使用し、長い道のりでPropertyInfoを作成して後で追加します。どちらの方法も機能しません。ただし、チュートリアル(摂氏から華氏など)のサーバーで試してみると、正常に機能し、適切な答えが返されます。
ここに、Webサーバーからの「コード」があります。
問題の解決に役立つ場合に備えて、WSDLファイルをフォローします。
ですから、私は何をすべきか全く分からないので、あなたの一人が私を助けてくれることを願っています。よろしく、クリスチャン
c# - その場で新しいPropertyInfoオブジェクトを作成します
これは私の最初の投稿であり、自分の問題に関連するトピックをある程度検索しましたが、適切な答えを見つけるのに多くの問題があります。
私の質問は非常に単純かもしれませんが、答えを出すのはそれほど簡単ではないかもしれないことを私は知っています。存在する場合。
そうは言っても、これは私の場合です。例として、次のように、クラスからプロパティを取得するために使用しているPropertyInfoオブジェクトの配列があります。
簡単そうですね。今私の問題はこれです:新しいPropertyInfoオブジェクトを作成し、それを配列に追加する方法は?
ユーザーがPropertyInfoの値を設定したいという他の投稿を見たことがありますが、それは私が必要としているものではありません。必要なのは、新しいPropertyInfoオブジェクトをその場で作成することです。ここで、使用可能なデータはNameとTypeのみです。
以前に投稿したテストケースは、私が達成しようとしていることのほんの一例にすぎません。私の本当の最終的な目標は、実際、このクラスに基づいて新しいPropertyInfoを作成できるようにすることです。
誰かが私がこれを達成するのを手伝ってくれることを願っています。よろしくお願いします!
編集:GetProperties()メソッドの前にo.GetType()を追加するのを忘れました。イリヤ・イワノフに感謝します!
私は次のようにメソッドSelectPropertiesを呼び出しています:
メソッドは次のようになります。
よろしくお願いします、
ルイス
更新:
わかりました。280Z28のアドバイスに従い、新しいクラスでPropertyInfoを継承しています。さらに調査を行ったところ、MSDNで、GetValue、SetValue、GetAccessors、GetGetMethod、GetSetMethod、およびGetIndexParametersのメソッドをオーバーライドする必要があることがわかりました。
ただし、パラメーターを使用してbaseを呼び出そうとすると、「抽象メンバーを呼び出せません:'System.Reflection.PropertyInfo.GetAccessesors(bool)'」というエラーが表示されます。パラメータを指定せずにメソッドを呼び出そうとすると、エラーは表示されませんが、それは間違ったアプローチのように感じます。
これは私がこれまでに得たものです:
更新2:
わかりました、それはうまくいきませんでした。PropertyInfoまたはPropertyDescriptorのいずれかの派生クラスを実行しようとして数時間後、私はそのアプローチを実行しないことにしました。
代わりに、私は他の投稿を読んで別のアイデアを思いつきました。私の本当の問題は、私が通常読んでプロパティを取得するために使用するクラスが常に同じであるとは限らないという事実にあります。ですから、おそらく本当に必要なのは、動的クラスをその場で作成し、それからプロパティを取得する方法にすぎないことに気づきました。
ExpandoObjectやElasticObjectと呼ばれるものがあることを読みましたが、最終的に解決策を得るためにそれらを問題に適用する方法はまだよくわかりません。
さて、私が実際に行っているのはこれです->次のリンクに記載されているソリューションを使用しています:jQuery DataTables Plugin Meets C#。
これは、DBテーブルごとに異なる静的モデル/クラスがあることを前提としています。ただし、私の場合、2つのタイプの列があります。各DBテーブルクラスによって提供される列(別名基本列)と、適応ですでに動的に提供している追加の列です。
例:これがDBテーブルクラスの場合:
次に、文字列型の「アクション」と呼ばれる追加の列を指定します。次に、DataTableParserクラスの_properties属性に次の情報が含まれている必要があります。
そして正直に言うと、それが私に必要なすべてです!それ以上でもそれ以下でもありません!残りはすでに解析しています!
結局、DataTableParserクラスに渡されるオブジェクトとは異なる数の列(提供される)があるため、DataTableの並べ替えとフィルタリング中に常にエラーが発生します。
何か助けてください?ほんとうに必要だ!再度、感謝します。
よろしくお願いします、
ルイス
c# - C# リフレクション、クラス内のプロパティ インスタンスを取得して値を設定する方法
クラスのメソッド内でクラスのプロパティをデフォルト値にリセットしたいと思います。私のクラスは一度インスタンス化され(実際にはMVVMフレームワークのViewModelです)、ViewModel全体を破棄して再作成したくありません。多くのプロパティをクリアするだけです。以下のコードは私が持っているものです。私が見逃しているのは、SetValue メソッドの最初のパラメーターを取得する方法だけです。これは、設定しているプロパティのインスタンスであることはわかっていますが、それにアクセスする方法がわかりません。「オブジェクトがターゲット タイプと一致しません」というエラーが表示されます。
.net - 基本クラスのメンバーが派生クラスの同じメンバーと異なるのはなぜですか?
これは、この質問へのフォローアップです:ラムダ式が期待される MemberInfo を返さない
sについても同様MethodInfo
です。
Human
がインターフェースである場合とname
、Human
が抽象/仮想である場合の違いが必要であることは理解できます。しかし、なぜ密閉型の場合はそうなるのでしょうか? のは正確にはname
のではありませんか?Man
name
Human
明確化: Jon が言うように、彼らReflectedType
の s は異なります。ReflectedType
in equality は、インターフェイス メンバーまたはオーバーライドされたメンバーが異なるため、それらが等しいかどうかを判断するときに便利です。しかし、上記のような単純なケースの同等性を判断するために考慮する必要はないと思います。設計チームは一貫性を保ちたかったのかもしれません。ReflectedType
複数のクラスにまたがる同じメンバーの等価性を決定する際に、フレームワーク設計者がプロパティを考慮するようになった理由は何なのか疑問に思っています。