Thing
から暗黙的にキャスト可能なクラスがありstring
ます。パラメータを使用してメソッドを直接呼び出すと、toThing
からのキャストが正しく実行されます。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"});
}
}
}
メタ:暗黙のキャストやリフレクションが悪い理由については議論しないでください。