- 我需要更新~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);
但是这个方法需要的代码对我来说不是很干净(下面)。还是比一堵如果墙好,但是有没有办法让它更干净?
(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
编辑:裁判不会工作。当sourceValue为null时,不传播更改。
1条答案
按热度按时间ngynwnxp1#
可以使用ref:
使用方法:
编辑:在你说它不起作用之后,我创建了一个DotNetFiddle,我相信它确实起作用,对于我能想到的所有场景(它总是打印所有值都是相同的)。
在这样做的时候,我被迫对代码进行修复,因为我复制了您对
inputLastUpdate?.LastUpdated
的使用,但是因为inputLastUpdate
是DateTime?
类型,所以我必须删除?.LastUpdated
部分。也许这与你说它不起作用的原因有关,但我不知道为什么或如何。