@DancingOnWater

Есть ли в C# аналог numeric_limits из C++?

Собственно, сабж. К примеру, в моей шаблонной функции в С++ я мог написать что-то вроде
template<typename T> void fun()
{
    auto x = numeric_limits<T>::max();
}

Чего-то похожего хочется и в C#
  • Вопрос задан
  • 2751 просмотр
Решения вопроса 1
aush
@aush
У числовых типов в .Net есть статические поля MinValue и MaxValue, поэтому вашу задачу можно решить рефлексией:

public class MyNumeric<T> where T : struct, IComparable<T>, IEquatable<T>, IConvertible
{
  public static readonly T MaxValue = ReadStaticField("MaxValue");
  public static readonly T MinValue = ReadStaticField("MinValue");

  private static T ReadStaticField(string name)
  {
    FieldInfo field = typeof(T).GetField(name, BindingFlags.Public | BindingFlags.Static);
    if (field == null)
    {
      throw new InvalidOperationException("Нечисловой тип: " + typeof(T).Name);
    }
    return (T)field.GetValue(null);
  }
}


Соответственно, использование:

Console.WriteLine(MyNumeric<int>.MaxValue);
Console.WriteLine(MyNumeric<float>.MinValue);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Int16.MaxValue
Int16.MinValue
Int.MaxValue
Int.MinValue
Double.Epsilon


Словом... частично все это есть, но судя по всему не полностью.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы