Refactor variable merging logic in ActivityExecutionContext

Replaced LINQ-based logic with a dictionary approach to merge variables. This ensures that variables are consistently merged by either name or ID when name is absent. It improves code clarity and handles edge cases more robustly.
This commit is contained in:
Sipke Schoorstra 2025-03-13 11:54:28 +01:00
parent 24bd64b8b4
commit 882ea8cf57
No known key found for this signature in database
GPG key ID: 5C10502B28A4268F

View file

@ -124,7 +124,20 @@ public partial class ActivityExecutionContext : IExecutionContext, IDisposable
{
var containerVariables = (Activity as IVariableContainer)?.Variables ?? Enumerable.Empty<Variable>();
var dynamicVariables = DynamicVariables;
return containerVariables.Concat(dynamicVariables).DistinctBy(x => x.Name);
var mergedVariables = new Dictionary<string, Variable>();
foreach (var containerVariable in containerVariables)
{
var name = !string.IsNullOrEmpty(containerVariable.Name) ? containerVariable.Name : containerVariable.Id;
mergedVariables[name] = containerVariable;
}
foreach (var dynamicVariable in dynamicVariables)
{
var name = !string.IsNullOrEmpty(dynamicVariable.Name) ? dynamicVariable.Name : dynamicVariable.Id;
mergedVariables[name] = dynamicVariable;
}
return mergedVariables.Values;
}
}