需要更新泛型方法中的引用值 - 如何使其更清晰?

问题描述 投票:0回答:1
  • 我必须更新 ~30 个参数。
  • 更新取决于
    LastUpdated
    字段。
  • 每个参数都有自己的
    LastUpdated
    字段。
  • 这是 IoT Device Twin 的 ETL 过程(这意味着我无法更改输入 JSON),因此我希望使其尽可能快(没有不必要的解析)。

这是通用方法:

 private static (T value, DateTime? lastUpdate) UpdateSourceIfNewer<T>(T sourceValue, DateTime? sourceLastUpdate, T inputValue, DateTime? inputLastUpdate)
 {
     if (inputValue != null &&
        (sourceLastUpdate is null || sourceLastUpdate < inputLastUpdate))
     {
         sourceValue = inputValue;
         sourceLastUpdate = inputLastUpdate?.LastUpdated;
     }

     return (sourceValue, sourceLastUpdate);

但是这个方法需要的代码对我来说不是很干净(如下)。仍然比一堵 ifs 墙好,但是有什么办法让它更干净吗?

 (src.Param1, src.Param1LastUpdated) = UpdateSourceIfNewer(
     src.Param1, src.Param1LastUpdated, input.Param1, input.Metadata.Param1);
 (src.Param2, src.Param2LastUpdated) = UpdateSourceIfNewer(
     src.Param2, src.Param2LastUpdated, input.Param2, input.Metadata.Param2);
 /// another ~30 parameters
c# .net code-cleanup
1个回答
0
投票

您可以使用参考

private static void UpdateSourceIfNewer<T>(ref T sourceValue, ref DateTime? sourceLastUpdate, T inputValue, DateTime? inputLastUpdate)
{
    if (inputValue != null &&
       (sourceLastUpdate is null || sourceLastUpdate < inputLastUpdate))
    {
        sourceValue = inputValue;
        sourceLastUpdate = inputLastUpdate?.LastUpdated;
    }
}

用途:

UpdateSourceIfNewer(ref src.Param1, ref src.Param1LastUpdated, input.Param1, input.Metadata.Param1);
© www.soinside.com 2019 - 2024. All rights reserved.