Reuse object arrays in FieldLoader Parse methods

This commit is contained in:
RoosterDragon
2022-01-29 20:19:40 +00:00
committed by abcdefg30
parent 2ab3917f29
commit bd30c66f95

View File

@@ -478,9 +478,15 @@ namespace OpenRA
return set; return set;
var parts = value.Split(SplitComma, StringSplitOptions.RemoveEmptyEntries); var parts = value.Split(SplitComma, StringSplitOptions.RemoveEmptyEntries);
var addMethod = fieldType.GetMethod("Add", fieldType.GetGenericArguments()); var arguments = fieldType.GetGenericArguments();
var addMethod = fieldType.GetMethod("Add", arguments);
var addArgs = new object[1];
for (var i = 0; i < parts.Length; i++) for (var i = 0; i < parts.Length; i++)
addMethod.Invoke(set, new[] { GetValue(fieldName, fieldType.GetGenericArguments()[0], parts[i].Trim(), field) }); {
addArgs[0] = GetValue(fieldName, arguments[0], parts[i].Trim(), field);
addMethod.Invoke(set, addArgs);
}
return set; return set;
} }
@@ -489,12 +495,12 @@ namespace OpenRA
var dict = Activator.CreateInstance(fieldType); var dict = Activator.CreateInstance(fieldType);
var arguments = fieldType.GetGenericArguments(); var arguments = fieldType.GetGenericArguments();
var addMethod = fieldType.GetMethod("Add", arguments); var addMethod = fieldType.GetMethod("Add", arguments);
var addArgs = new object[2];
foreach (var node in yaml.Nodes) foreach (var node in yaml.Nodes)
{ {
var key = GetValue(fieldName, arguments[0], node.Key, field); addArgs[0] = GetValue(fieldName, arguments[0], node.Key, field);
var val = GetValue(fieldName, arguments[1], node.Value, field); addArgs[1] = GetValue(fieldName, arguments[1], node.Value, field);
addMethod.Invoke(dict, new[] { key, val }); addMethod.Invoke(dict, addArgs);
} }
return dict; return dict;