我有一个界面:
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
etc 之类的默认值为 null,并且在通过反射调用该方法时:
var method = typeof(Program).GetMethod("Default").MakeGenericMethod(typeof(string));
var defaulted = method.Invoke(null, null);
defaulted
将是 null,并且在调用dImpl.Get(out defaulted)
运行时不确定要使用哪个重载。
所以,我正在寻找的是:a)以某种方式使用当前界面设置[首选] b)实现目标的不同方式