使用双泛型的 C# 类 : give only one when both of them should be the same?

标签 c# .net generics

所以我在处理某段代码时遇到了一些困难,我不确定是否有更好的方法来处理它 - 但我觉得这是可能的。

假设我有一个类:

public class DeviceProcessingResult<TSucceeded, TFailed>
    {
        public TSucceeded[] Succeeded { get; set; }

        public TFailed[] Failed { get; set; }

        public DeviceProcessingResult(IEnumerable<TSucceeded> succeeded, IEnumerable<TFailed> failed)
        {
            Succeeded = succeeded.Cast<TSucceeded>().ToArray();
            Failed = failed.Cast<TFailed>().ToArray();
        }
    }

我使用此类创建对象,这些对象包含处理成功的对象数组和处理失败的对象数组。这种类型的对象用于我们当前拥有的代码的各个部分。在其中一个地方,我们会像这样使用它:

return new DeviceProcessingResult<DeviceResponse, DeviceModel>(succeeded, failed);

由于我们需要返回结果,处理成功时返回的对象类型包含比处理失败时返回的模型更多的信息。

现在这是目前唯一具有 2 种不同类型对象的代码,因为所有其他代码如下所示:

return new DeviceProcessingResult<DeviceModel, DeviceModel>(succeeded, failed);

如您所见,我们使用了同一个对象 2 次。

现在这个问题的重点是:是否可以做类似的事情

return new DeviceProcessingResult<DeviceModel>(succeeded, failed);

因为无论如何都会有相同的东西吗?还是没有(好的)解决方法,我们是否应该始终指定这两种类型?

最佳答案

简单的解决方案是像这样简单地继承这个类:

public class DeviceProcessingResult<T> : DeviceProcessingResult<T, T>
{
    public DeviceProcessingResult(IEnumerable<T> succeeded, IEnumerable<T> failed)
        : base(succeeded, failed)
    { /*Nothing more to do here...*/ }
}

public class DeviceProcessingResult<T, T1>
{
    public T[] Succeeded { get; set; }
    public T1[] Failed { get; set; }

    public DeviceProcessingResult(IEnumerable<T> succeeded, IEnumerable<T1> failed)
    {
        Succeeded = succeeded.ToArray();
        Failed = failed.ToArray();
    }
}

关于使用双泛型的 C# 类 : give only one when both of them should be the same?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54308523/

相关文章:

c# - 清除类型为 : DropDownList 的 Winform Combobox 中的默认空值

c# - 创建路由时出错

c# - 用户可见的 protected 成员

.net - .NET 4 是否更改了证书请求框架在 TLS 中的应答方式

c# - 使用 Type 变量调用正确的泛型方法,带 out 和 ref

c# - 如何使用 DWrite 测量文本范围?

c# - 即使以管理员身份运行 Visual Studio 后,请求的操作也需要提升

c# - System.Data.SqlClient.SqlTransaction.Dispose 中发生了什么?

java - 如何在另一个有界类型上定义方法有界类型?

c# - 在 MEF 2 中使用封闭类型组合开放通用类型