【发布时间】:2019-01-22 12:40:50
【问题描述】:
所以我在处理某段代码时有点吃力,我不确定是否有更好的方法来处理它 - 但感觉这是可能的。
假设我有一堂课:
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);
反正那里的东西都是一样的吗?或者没有(好的)方法可以解决这个问题,我们是否应该始终指定这两种类型?
【问题讨论】:
-
我相信你可以像
return new DeviceProcessingResult(succeeded, failed);一样调用它,并且类型将从传入的参数类型中推断出来 -
为什么需要
.Cast<TSucceeded>()?