ET>как сделать сравнение с нулем? на входе могут быть int, decimal Convert.ChangeType
class Checker
{
public bool Check<T>(T item) where T : IComparable<T>
{
return item.CompareTo(Convert.ChangeType(0,typeof(T)) < 0;
}
}
Вот пример для перечислений
var парам = параметры[0];
var тип = парам.GetType();
long res = (long)Convert.ChangeType(парам, typeof(long));
for (int i = 1; i < параметры.Length; i++)
res |= (long)Convert.ChangeType(параметры[i], typeof(long));
if (тип.IsEnum)
{
var ТипЗначений = Enum.GetUnderlyingType(тип);
var number = Convert.ChangeType(res, ТипЗначений);
return AutoWrap.ОбернутьОбъект(Enum.ToObject(тип, number));
}
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, e.thrash, Вы писали:
ET>Есть такой код
ET>
ET> class Checker
ET> {
ET> public bool Check<T>(T item) where T : IComparable<T>
ET> {
ET> return item.CompareTo(0) < 0;
ET> }
ET> }
ET>
ET>как сделать сравнение с нулем? на входе могут быть int, decimal
Может так?
class Checker
{
public static int CompareWithZero<T>(T toCompare) where T : IComparable
{
if (toCompare is int)
{
return toCompare.CompareTo(0);
}
if (toCompare is decimal)
{
return toCompare.CompareTo(0m);
}
throw new ArgumentException("Параметр должен иметь тип int или decimal");
}
}
Здравствуйте, Berill, Вы писали:
B>Здравствуйте, e.thrash, Вы писали:
ET>>Есть такой код
ET>>
ET>> class Checker
ET>> {
ET>> public bool Check<T>(T item) where T : IComparable<T>
ET>> {
ET>> return item.CompareTo(0) < 0;
ET>> }
ET>> }
ET>>
ET>>как сделать сравнение с нулем? на входе могут быть int, decimal
B>Может так? B>
class Checker
B> {
B> public static int CompareWithZero<T>(T toCompare) where T : IComparable
B> {
B> if (toCompare is int)
B> {
B> return toCompare.CompareTo(0);
B> }
B> if (toCompare is decimal)
B> {
B> return toCompare.CompareTo(0m);
B> }
B> throw new ArgumentException("Параметр должен иметь тип int или decimal");
B> }
B> }
а как теперь его использовать внутри класса Checker?
class Checker<T>
{
public T CheckValue { get; set; }
public String CheckValueStr
{
get
{
return CompareWithZero(CheckValue) > 0 ? "" : "-";
}
}
public int CompareWithZero<T>(T toCompare) where T : IComparable
{
if (toCompare is int)
{
return toCompare.CompareTo(0);
}
if (toCompare is decimal)
{
return toCompare.CompareTo(0m);
}
throw new ArgumentException("Параметр должен иметь тип int или decimal");
}
}
Но вообще вопрос осень странный, с сценария начинать надо. А то для SqlInt32 или для Nullable<>, скажем, сюрпрайз будет.
И вообще может оказаться, что простого EqualityComparer<T> хватит.
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Serginio1, Вы писали:
S>>Convert.ChangeType
S>Убивать за такое в продакшн-коде надо, такая закладка не ловится почти никогда. А выстреливает, например, вот так.
Уже умер
Сейчас переношу данные из 1С 7.7 в 8.3
и солнце б утром не вставало, когда бы не было меня