Модель, которой вы должны следовать, - это модель в классе .Net Convert, у вас нет причин делать конструктор универсальным, он ничего не приводит к таблице. Измените подпрограммы преобразования на статические методы, а сам класс на static:
static class CrmToRealTypeConverter : IConverter
{
#region IConverter Members
public static DateTime? Convert(CrmDateTime obj)
{
return obj.IsNull == false ? (DateTime?)obj.UserTime : null;
}
public static int? Convert(CrmNumber obj)
{
return obj.IsNull == false ? (int?)obj.Value : null;
}
public static decimal? Convert(CrmDecimal obj)
{
return obj.IsNull == false ? (decimal?)obj.Value : null;
}
public static double? Convert(CrmDouble obj)
{
return obj.IsNull == false ? (double?)obj.Value : null;
}
public static float? Convert(CrmFloat obj)
{
return obj.IsNull == false ? (float?)obj.Value : null;
}
public static decimal? Convert(CrmMoney obj)
{
return obj.IsNull == false ? (decimal?)obj.Value : null;
}
public static bool? Convert(CrmBoolean obj)
{
return obj.IsNull == false ? (bool?)obj.Value : null;
}
}
Затем при вызове одного из методов преобразования компилятор выберет правильную перегрузку для вызова:
CrmDateTime crmDate;
CrmToRealTypeConverter.Convert(crmDate); // Will call the static DateTime? Convert(CrmDateTime obj) overload
// or
CrmNumber crmNum;
CrmToRealTypeConverter.Convert(crmNum); // Will call the static int? Convert(CrmNumber obj) overload
// and so on...
Редактировать :
Если вы делаете следующее:
CrmFloat num;
// ...
Object obj = num;
CrmToRealTypeConverter.Convert(obj);
это не будет работать, так как компилятор не знает тип, соответствующий перегрузке. Вам придется разыграть его, и оно будет работать:
CrmToRealTypeConverter.Convert((CrmFloat)obj);