私は、string
から暗黙的にキャスト可能なクラスThing
を持っています。 Thing
パラメータを直接呼び出すと、string
からThing
へのキャストが正しく行われます。私は同じメソッドを呼び出すためにリフレクションを使用する場合反映されたメソッド呼び出しに暗黙的にキャストする方法
は、しかし、それは
System.ArgumentException : Object of type 'System.String' cannot be
converted to type 'Things.Program+Thing'.
はたぶんこれのために良い理由があるが、私はそれを把握することができない例外がスローされます。誰かがリフレクションを使ってこれをどうやって動かすか考えていますか?
namespace Things
{
class Program
{
public class Thing
{
public string Some;
public static implicit operator Thing(string s)
{
return new Thing {Some = s};
}
}
public void showThing(Thing t)
{
Console.WriteLine("Some = " + t.Some);
}
public void Main()
{
showThing("foo");
MethodInfo showThingReflected = GetType().GetMethod("showThing");
showThingReflected.Invoke(this, new dynamic[] {"foo"});
}
}
}
メタ:してください、暗黙的キャストや反射が悪い理由がない議論。あなたは配列型による変換を行うことができます。この特定のケースで
暗黙的なキャストがコンパイラの構文砂糖であるため、私の頭の上にはないので、私はそれを賭けるだろう。キャストメソッドへの実際の呼び出しは、コンパイル時に配線されていること。編集:任意のオブジェクトの変換のための暗黙のコンバータを呼び出すいくつかの一般的な方法を持つ必要がありますか?または、これは、別の静的メソッドや、あらかじめ決められたメソッドや特殊なコンストラクタへの他のリフレクションコールをターゲットにしたいという特別なケースですか? –
同様の質問[こちら](http://stackoverflow.com/questions/4501469/c-sharp-implicit-cast-overloading-and-reflection-problem) –
暗黙のキャストはリフレクションでは不可能ですが、[TypeConvertor]を使用することができます( http://msdn.microsoft.com/en-us/library/98bbex99.aspx#the_typeconverter_class)。 –