私の状況は非常に単純です。コードのどこかに次のような記述があります:
dynamic myVariable = GetDataThatLooksVerySimilarButNotTheSame();
//How to do this?
if (myVariable.MyProperty.Exists)
//Do stuff
つまり、基本的に私の質問は、特定のプロパティが動的変数で使用可能であるかどうかを (例外をスローせずに) 確認する方法です。確認することはできますGetType()
が、オブジェクトの型を知る必要は実際にはないので、それは避けたいと思います。私が本当に知りたいのは、プロパティ (または、その方が楽ならメソッド) が使用可能かどうかだけです。何かヒントはありますか?
ベストアンサー1
C# コンパイラで動的バインディングを処理する方法を再実装しない限り、変数にアクセスせずに特定のメンバーがあるかどうかを確認する方法はないと思いますdynamic
。C# 仕様によると、これは実装定義であるため、おそらく多くの推測が必要になるでしょう。
したがって、実際にメンバーにアクセスして、失敗した場合は例外をキャッチする必要があります。
dynamic myVariable = GetDataThatLooksVerySimilarButNotTheSame();
try
{
var x = myVariable.MyProperty;
// do stuff with x
}
catch (RuntimeBinderException)
{
// MyProperty doesn't exist
}