У меня есть две очень похожие функции:
public Dictionary<string, T> UpdateSuccessProperties<T, TU>(Dictionary<string, T> oldSObjectByAlternativeIds, List<TU> updatedSObjects)
where TU : T
where T : AlternativeIdentifiable {
updatedSObjects.ForEach((updatedSObject) => {
if (oldSObjectByAlternativeIds.TryGetValue(updatedSObject.GetAlternativeId(), out T oldSObject)) {
oldSObject.SalesforceId = updatedSObject.SalesforceId;
}
});
return oldSObjectByAlternativeIds;
}
public Dictionary<string, T> UpdateFailureProperties<T, TU>(Dictionary<string, T> oldSObjectByAlternativeIds, List<TU> updatedSObjects)
where TU : T
where T : AlternativeIdentifiable {
updatedSObjects.ForEach((updatedSObject) => {
if (oldSObjectByAlternativeIds.TryGetValue(updatedSObject.GetAlternativeId(), out T oldSObject)) {
oldSObject.SalesforceError = updatedSObject.SalesforceError;
}
});
return oldSObjectByAlternativeIds;
}
Следует заметить, что есть только 3 отличия, кроме имени метода:
- Самый конец URL-адрес
- Свойство
oldSObject
типа T
, которое получит новое значение. - Свойство
updatedSObject
типа TU
, которое предоставит старое значение.
Есть ли способ объединить их во что-то вроде этого (псевдокод, не работает):
public Dictionary<string, T> UpdateProperties<T, TU>(Dictionary<string, T> oldSObjectByAlternativeIds, List<TU> updatedSObjects, string receiverField, string supplierField)
where TU : T
where T : AlternativeIdentifiable {
updatedSObjects.ForEach((updatedSObject) => {
if (oldSObjectByAlternativeIds.TryGetValue(updatedSObject.GetAlternativeId(), out T oldSObject)) {
oldSObject.set(receiverField, updatedSObject.get(supplierField));
}
});
return oldSObjectByAlternativeIds;
}
?
Последние два параметра не обязательно быть струнами; Я бы предпочел что-нибудь безопасное.