Ну, Dictionary<T,U>
действительно реализует IEnumerable<KeyValuePair<T,U>>
, поэтому все, что хочет использовать IEnumerable, может ссылаться на свойство Dictionary, и это будет работать. Поскольку вы хотите внести это изменение, я предполагаю, что вы хотите сделать что-то, чего не позволяет Словарь, например, дублировать ключи.
Если свойство замены можно преобразовать в словарь, я бы сделал что-то вроде этого. У вас есть старая собственность, сидящая рядом с вашей новой собственностью, и имейте дело с преобразованиями в получателе и установщике старой собственности. Обратите внимание, что этот шаблон потерпит неудачу, если сценарий использования MyLegacyProperty должен извлечь его, изменить его, а не вернуть обратно; в этом случае вам нужно будет сделать что-то похожее на ObservableCollection. (Есть ли ObservableDictionary?)
public class LegacyObject
{
public Dictionary<string, string[]> MyLegacyProperty
{
get { return ConvertMyNewProperty(); }
set { this.MyNewProperty = ConvertMyLegacyProperty(value); }
}
IEnumerable<KeyValuePair<string, string[]>> MyNewProperty { get; set; }
}
Если свойство замены не может быть преобразовано в словарь, то вы говорите о внесении реальных изменений во внешний интерфейс вашего класса. Я не верю, что есть какая-то замена для того, чтобы кусать пулю и вносить изменения без обратной совместимости. Единственный совет, который я могу вам дать, - сделать так, чтобы новое свойство имело имя, отличное от старого: вы сможете использовать функцию «Найти в файлах», чтобы найти код, который нужно изменить, и это приведет к ошибкам компилятора. Вы получаете ясные и однозначные.