已知類型的泛型參數我有一個接口:出,僅在運行時
public interface IOut<T>
{
void Get(out T output);
}
,並實現它的類:
public class Impl : IOut<string>, IOut<int>{
public void Get(out string output) { output = "string"; }
public void Get(out int output) { output = 12; }
}
我可以做以下就好:
public static void Main()
{
dynamic dImpl = new Impl();
string sOutput;
int iOutput;
dImpl.Get(out sOutput);
dImpl.Get(out iOutput);
Console.WriteLine(sOutput);
Console.WriteLine(iOutput);
}
我的問題是我只知道我需要的類型在運行時得到,所以我怎麼樣想打電話給我Get
代碼是像這樣:
public static void Main()
{
dynamic dImpl = new Impl();
var t = typeof(string);
t output;
dImpl.Get(out output);
Console.WriteLine(output);
}
現在,我知道這不會工作,我嘗試了沉思執行主演:
public static T Cast<T>(object o) { return (T) o; }
,但我沒有對象投射,我只有一個Type
。我試過默認值:
public static T Default<T>() { return default(T); }
但像string
等爲null,並通過反射調用該方法時,事情默認:調用dImpl.Get(out defaulted)
時
var method = typeof(Program).GetMethod("Default").MakeGenericMethod(typeof(string));
var defaulted = method.Invoke(null, null);
defaulted
將是空的,運行時間不確定使用哪個超載。
所以,我正在尋找的是兩種:一個 )好歹使用當前接口設置[首選] B)用不同的方式來實現目標
這是偉大的,我沒有想過它會這樣。 – 2013-03-06 13:20:14
''impl' in'method.Invoke(impl,parameters)'從哪裏來? – bflemi3 2013-10-08 19:46:27
@ bflemi3 - 它只是爲了成爲Impl類的一個實例。我已經更新了答案。 – Lee 2013-10-08 20:24:54