c# - 将 void 传递给泛型类

标签 c# generics delegates

我正在尝试创建一个表单,该表单将在处理特定任务(作为委托(delegate)传递给构造函数)时对某些内容进行动画处理。它工作正常,但我遇到的问题是,如果我要执行的特定方法的返回类型为 void,我将无法实例化泛型类的副本。

我知道这是设计使然,但我想知道是否有针对这种情况的已知解决方法。

如果它对我的所有 Windows 窗体都有帮助(为简洁起见进行了修剪):

public partial class operatingWindow<T> : Form
{
    public delegate T Operation();
    private Operation m_Operation;

    private T m_ReturnValue;
    public T ValueReturned { get { return m_ReturnValue; } }

    public operatingWindow(Operation operation) { /*...*/ }
}

我这样调用它:

operatingWindow<int> processing = new operatingWindow<int>(new operatingWindow<int>.Operation(this.doStuff));
processing.ShowDialog();

// ... 
private int doStuff()
{
    Thread.Sleep(3000);

    return 0;
}

最佳答案

不,您需要创建一个重载来执行此操作。

例如

public operatingWindow(Action action) 
{ 
    m_Operation=() => { action(); return null; }
}

另外你不需要定义你自己的委托(delegate),你可以使用Func<T>和行动。

关于c# - 将 void 传递给泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/668316/

相关文章:

c# - 模拟框架如何工作?

java - 为什么在工厂模式中包装类型参数可以解决类型删除问题?

c# - C# 中自定义委托(delegate)的示例用法

javascript - 将值从 QueryString 传递到 asp.net mvc 中 Controller 的 Index 操作

c# - 谁应该捕获异常,调用者还是被调用者

c# - Microsoft.AspNetCore.Routing.RouteCreationException : 'An error occurred while creating the route with name ' default' and template

c# - 通用策略模式

java - 单个泛型参数同时接受两种不同类型

ios - 在 didSelectItemAt 中,单元格的委托(delegate)为零

iphone - 将数据从 NSObject 发送到 UIViewController