Привет, вы можете создать базовый класс, который хранит функцию конвертера и реализует оба члена, после чего вы можете наследовать его и предоставлять только преобразование строки в объект
public abstract class Convert<T>:ConverterBase
{
private Func<string, T> ConverterFunction {get;set;}
protected Convert(Func<string, T> converterFunction)
{
ConverterFunction = converterFunction;
}
public override object StringToField(string from)
{
try
{
return ConverterFunction(from);
}
catch (ArgumentException exception)
{
ThrowConvertException(from, exception.Message);
return null;
}
}
public override string FieldToString(object from)
{
return from.ToString();
}
}
Позже создайте несколько простых производныхклассы, например:
public class ConvertMyClass:ConverterBase<MyClass>
{
public ConvertMyClass()
:base(from => new MyClass(from)
{
}
}
Надеюсь, это поможет :) Не забудьте загрузить последнюю стабильную версию с: http://teamcity.codebetter.com/viewLog.html?buildId=lastSuccessful&buildTypeId=bt66&tab=artifacts&guest=1
РЕДАКТИРОВАТЬ: Используя Reflection, вы можете попробовать:
class Convert<T>:ConverterBase
{
public override object StringToField(string from)
{
try
{
return Activator.CreateInstance(typeof(T), from);
}
catch (ArgumentException exception)
{
ThrowConvertException(from, exception.Message);
return null;
}
}
public override string FieldToString(object from)
{
return from.ToString();
}
}
ПРИМЕЧАНИЕ. Отражение медленное, поэтому вы должны принять это во внимание