我有一個類Thing
可以從string
隱式轉換。當我直接調用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"});
}
}
}
Meta:請不要討論爲什麼隱式投射或反射不好。
關於我的頭頂,我會打賭是因爲(我認爲,並糾正我,如果我錯了),隱式轉換是編譯器的語法糖。在編譯時實際調用鑄造方法。編輯:你需要有一些通用的方式來調用隱式轉換器的任何對象轉換?或者這是一種特殊情況,你會願意將一個單獨的靜態方法或其他反射調用指定給一個預定義的方法或一個專門的構造函數? – 2012-07-18 14:48:53
類似的問題[這裏](http://stackoverflow.com/questions/4501469/c-sharp-implicit-cast-overloading-and-reflection-problem) – 2012-07-18 14:54:27
隱式轉換是不可能通過反射,但你可以使用[TypeConvertor]( http://msdn.microsoft.com/en-us/library/98bbex99.aspx#the_typeconverter_class)。 – 2012-07-18 14:58:49