我有一個通用委托,它接受一個引數,Args<T>. 我也有一個普通的代表,它接受Args.
delegate Task ExampleDelegate<T>(Args<T> args)
delegate Task ExampleDelegate(Args args)
Args<T> 從 Args
public class Args {
}
public class Args<T> : Args {
}
我目前正在擴展我的非通用介面/類,它們用于ExampleDelegate使用ExampleDelegate<T>.
由于它們都擴展了非通用版本,因此在我不得不重寫一個接受ExampleDelegate.
由于簽名不匹配,我一直無法ExampleDelegate<T>投入ExampleDelegate。
我能夠做到這一點的方法之一是,
ExampleDelegate<SomeClass> genericDelegate= //some method
//First case
ExampleDelegate nonGenericDelegate = args => genericDelegate(args as Args<SomeClass>);
//Second case
genericDelegate = argsT => nonGenericDelegate(argsT);
有沒有更好的方法來做到這一點?
更新:是否可以在不創建上述匿名方法的情況下執行此操作?
uj5u.com熱心網友回復:
有沒有更好的方法來做到這一點?
可能是的,但我們不知道您要做什么,所以我們無法幫助您
我不明白為什么我也需要在第二種情況下顯式轉換?
你不……?這是一些編譯得很好的代碼:
class TestClass
{
void DoStuff()
{
ExampleDelegate nonGeneric = a => { };
ExampleDelegate<int> generic = b => nonGeneric(b);
}
}
delegate void ExampleDelegate(Args args);
delegate void ExampleDelegate<T>(Args<T> args);
class Args<T> : Args {}
class Args {}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/363417.html
上一篇:TypeScript:覆寫從Class<T>回退繼承的Method<T>中的泛型型別
下一篇:獲取泛型替換型別
