c# - 转换到泛型时忽略 T

标签 c# generics

我正试图减少一些额外的调用,并将 5 分钟的问题变成 30 分钟的问题。有没有办法在不知道泛型类型的情况下转换对象?在下面的代码中,我想制作 Complete<T, T2>简单 Complete<T2> .

public void Complete<T, T2>(object sender, RunWorkerCompletedEventArgs args) 
    where T2 : new()
{
    ServiceContainer<T, T2> callback = (ServiceContainer<T, T2>)args.Result;
    StateManager.BackgroundWorker result = (StateManager.BackgroundWorker)sender;
    callback.func(result.state, callback.response);
}

所以我希望它看起来像这样:

public void Complete<T2>(object sender, RunWorkerCompletedEventArgs args) 
    where T2 : new()
{
    ServiceContainer<object, T2> callback = (ServiceContainer<object, T2>)args.Result;
    StateManager.BackgroundWorker result = (StateManager.BackgroundWorker)sender;
    callback.func(result.state, callback.response);
}

最佳答案

您可以像这样使用动态语言运行时:

public void Complete<T2>(object sender, RunWorkerCompletedEventArgs args) 
    where T2 : new()
{
    dynamic callback = args.Result;
    dynamic result = sender;
    callback.func(result.state, callback.response);
}

如果您不在方法中使用 T2(就像在您的示例中那样),您可以将其删除并使您的方法成为非通用方法。

关于c# - 转换到泛型时忽略 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34009382/

相关文章:

c# - 忽略假用户名

c# - 为winform应用程序添加web前端

c# - SignalR - 仅适用于本地主机

c# - 这个方法的大 O 表示法是什么?

java - 创建一个参数为数组的泛型类

c# - 升级到 VS2017 后找不到任何适合该文化或中立文化错误的资源

c# - 使用通用接口(interface)配置通用工作流程

c# - 继承泛型作为函数参数

generics - 当作为参数传递时,in/out 在 Kotlin 中实际上做了什么?

c - 如何在c中实现通用链表