おそらく動的パターンを使用していますか?動的キーワードを使用して任意のメソッド/プロパティを呼び出すことができます。 myDynamicObject.DoStuff()を呼び出す前にメソッドが存在するかどうかをチェックする方法オブジェクトに特定のメソッド/プロパティがあるかどうかをチェックする方法は?
答えて
方法のためである:
public static bool HasMethod(this object objectToCheck, string methodName)
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}
編集:あなたも拡張メソッドを実行すると、この
ようにそれを使用することができますmyObject.HasMethod("SomeMethod");
これにはダイナミックタイプを使用しないでください。クラスにインターフェイスを実装させる方がよいでしょうか。 次に、実行時にオブジェクトがそのインタフェースを実装していることを確認することができ、したがって、期待されるメソッド(またはプロパティ)を持ちます。
public interface IMyInterface
{
void Somemethod();
}
IMyInterface x = anyObject as IMyInterface;
if(x != null)
{
x.Somemethod();
}
これは唯一正しい方法だと思います。
あなたが指摘していることは、ダックタイピングです。オブジェクトがメソッドを持っていることをすでに知っているシナリオでは役に立ちますが、コンパイラはそれを確認できません。 これは、たとえばCOM interopシナリオで役に立ちます。 (thisの記事を参照)
ダックタイピングとリフレクションを組み合わせたい場合は、ダックタイピングの目標が不足していると思います。
var property = object.GetType().GetProperty("YourProperty")
property.SetValue(object,some_value,null);
同様の反射によって
で宣言されたものは、オブジェクトが.NETフレームワークによって提供されるオブジェクトになる可能性があり、それを実装するために宣言できません。 –
何が問題なのですか? .NET Frameworkによって提供されるオブジェクトのようなオブジェクトであるかどうかは、オブジェクトに「追加」メソッドがあるかどうかをチェックしたい場合など、 –
と同じ方法でチェックできます。そして、オブジェクトがリスト
それは古い質問ですが、私はちょうどそれに遭遇しました。その名前を持つ複数のメソッドがある場合 Type.GetMethod(string name)
はAmbiguousMatchExceptionがスローされますので、私たちはより良い
public static bool HasMethod(this object objectToCheck, string methodName)
{
try
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}
catch(AmbiguousMatchException)
{
// ambiguous means there is more than one result,
// which means: a method with that name does exist
return true;
}
}
- 1. オブジェクトが特定のタイプであるかどうかをチェックする方法
- 2. Javaクラスに特定のメソッドがあるかどうかをチェックする方法?
- 3. オブジェクトが未定義/ nullであるかどうかをチェックする方法
- 4. オブジェクトが特定のタイプの配列であるかどうかをチェックする方法
- 5. オブジェクトに機能があるかどうかをチェックする方法は? (DoJo)
- 6. NSArrayに特定のクラスのオブジェクトが含まれているかどうかをチェックする方法は?
- 7. オブジェクトがあるかどうかをチェック
- 8. オブジェクトがJavascriptの「サブオブジェクト」であるかどうかをチェックする方法は?
- 9. JSONオブジェクトがJavaで空であるかどうかをチェックする方法は?
- 10. JSONオブジェクトがPHPで空であるかどうかをチェックする方法は?
- 11. オブジェクトが「深い空」であるかどうかをチェックする方法は?
- 12. Android - レイアウトにオブジェクトがあるかどうかチェックするには?
- 13. オブジェクトが文字列のリストであるかどうかをチェックする方法?
- 14. Jsoup - Elementが特定のクラスのものかどうかをチェックする方法?
- 15. 特定の単一リンクリストがループであるかどうかを特定する方法はありますか?
- 16. charが特定のUnicode範囲の間にあるかどうかをチェックする方法...?
- 17. Linq to SQL、特定のテーブル/クラスがDataContextのチェンジセットにあるかどうかをチェックする方法
- 18. 文字列が特定の範囲にあるかどうかをチェックする方法。 (Java)
- 19. 値がリストにあるかどうかチェックする方法
- 20. NSString =特定の文字列値かどうかをチェックする方法は?
- 21. 配列のすべての要素が特定の値であるかどうかをチェックする方法?
- 22. UITextFieldsが空であるかどうかをチェックする方法?
- 23. java.lang.reflect.TypeがEnumであるかどうかをチェックする方法
- 24. 特定の文字列がページにあるかどうかをチェック
- 25. エッジがあるサイクルにあるかどうかをチェックする方法?
- 26. ColdFusion:特定の要素が2次元配列に存在するかどうかをチェックする方法は?
- 27. オブジェクトがNSArrayまたはNSDictionaryであるかどうかをチェック
- 28. in_arrayはオブジェクトがオブジェクトの配列内にあるかどうかをどのようにチェックしますか?
- 29. オブジェクトがコンテキストエンティティフレームワーク内にあるかどうかをチェック
- 30. NSTableViewの特定のビューにマウスがあるかどうかを確認する方法はありますか?
そのケースを扱う* myDynamicObject *の種類は何ですか?それは 'DynamicObject'から派生したクラスですか? –
動的キーワード –