假設我們有一個將常規物件作為引數的方法。我需要測驗物件是否是 Func,呼叫它并檢索回傳值,但泛型型別可以是任何東西,我不能有一個很長的可能性串列:
public static object? Process(object o, out Type? type)
{
type = null;
if (o is Action action) action();
else if (o is int i) { type = typeof(long); return (long)i * (long)i; }
else if (o is double d) { type = typeof(float); return (float)(d - (long)d); }
else if (o is Func<int> funcint) { type = typeof(int); return funcint(); }
else if (o is Func<string> funcstr) { type = typeof(string); return funcstr(); }
else if (o is Func<object> funcobj) { type = typeof(object); return funcobj(); }
// ...
// ...
return null;
}
uj5u.com熱心網友回復:
您可以通過反射獲取引數型別,然后將其Func轉換為 `Delegate
Type t = o.GetType();
if (t.GetGenericTypeDefinition() == typeof(Func<>)
&& t.GetGenericArguments().Length == 1)
{
type = t.GetGenericArguments()[0];
return ((Delegate)o).DynamicInvoke();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/437847.html
下一篇:使用Rust空型別作為泛型系結
