У меня есть два метода расширения, которые очень похожи. Я хотел бы удалить дубликаты кода с шаблоном «дыра в середине» и т. П., Но не могу заставить его работать.
Код выглядит так:
public static String GetPublicPropertiesAsString( this Object @this )
{
return @this.GetType().GetProperties()
.Select( propertyInfo =>
{
var propertyValue = propertyInfo.GetValue( obj: @this,
invokeAttr: BindingFlags.Public,
binder: null,
index: null,
culture: null );
var propertyValueAsString = propertyValue != null ? propertyValue.ToString().RemoveAll( "00:00:00" ) : "[null]";
return "{0}: {1}".FormatWith( propertyInfo.Name, propertyValueAsString );
} ).JoinAsString( Environment.NewLine );
}
public static String GetFieldsAsString( this Object @this )
{
return @this.GetType().GetFields()
.Select( fieldInfo =>
{
var fieldValue = fieldInfo.GetValue( @this );
var fieldValueAsString = fieldValue != null ? fieldValue.ToString().RemoveAll( "00:00:00" ) : "[null]";
return "{0}: {1}".FormatWith( fieldInfo.Name, fieldValueAsString );
} ).JoinAsString( Environment.NewLine );
}
Может ли повторяющийся код, указанный выше, быть подвергнут рефакторингу?
Примечание: JoinAsString
, RemoveAll
и FormatWith
- мои собственные методы расширения.