所以我在处理某段代码时遇到了一些困难,我不确定是否有更好的方法来处理它 - 但我觉得这是可能的。
假设我有一个类:
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/