Если вы видите повторяющийся код, вы извлекаете метод.Это будет выглядеть примерно так:
private T GetValueOrDefault<T>(string key)
{
IMarkerInterface value = null;
if (Properties != null) Properties.TryGetValue(key, out value);
return value as T;
}
Затем измените ваш геттер:
get
{
return GetValueOrDefault<_ReturnType>("key");
}
Но если этот код распределен по нескольким классам, вам придется определить базовый класссодержащий свойство Properties
и вышеуказанный метод GetValueOrDefault()
, хотя protected
вместо private
.
В качестве альтернативы вы можете определить его как метод расширения для любого типа Properties
:
public static T GetValueOrDefault<T>(this IDictionary<string, IMarkerInterface> properties, string key)
{
IMarkerInterface value = null;
if (properties != null) properties.TryGetValue(key, out value);
return value as T;
}
И назовите это так:
get
{
return Properties.GetValueOrDefault<_ReturnType>("key");
}
Но, как комментирует @Daniel, это пахнет идеальным сценарием для генерации кода, потому что без этого у вас все равно останетсяпара строк (вставленных при копировании, подверженных ошибкам) кода.
Возможно, где-то есть источник для именования этих свойств, и вы можете использовать что-то вроде шаблонов T4 для генерации этого файла кода изэто.