Если значение в диапазоне (x, y), функция c # - PullRequest
5 голосов
/ 08 января 2012

Есть ли в c # функция, которая возвращает логическое выражение для выражения: if(value.inRange(-1.0,1.0)){}?

Ответы [ 3 ]

19 голосов
/ 08 января 2012

Описание

Я предлагаю вам использовать метод расширения.

Методы расширения позволяют «добавлять» методы к существующим типам без создания нового производного типа, перекомпиляции или иного изменения исходного типа.

Вы можете создать этот метод расширения в общем виде (спасибо digEmAll и CodeInChaos, которые предлагают это).Затем вы можете использовать это для каждого объекта, который реализует IComparable.

Решение

public static class IComparableExtension
{
    public static bool InRange<T>(this T value, T from, T to) where T : IComparable<T>
    {
        return value.CompareTo(from) >= 1 && value.CompareTo(to) <= -1;
    }
}

, затем вы делаете это

double t = 0.5;
bool isInRange = t.InRange(-1.0, 1.0);

Обновление для перфекционистов

После обширного обсуждения с @CodeInChaos, который сказал:

Я, вероятно, пойду с IsInOpenInterval, как предложено в предыдущем комментарии.Но я не уверен, что программисты без математического образования поймут эту терминологию.

Вы также можете назвать функцию IsInOpenInterval.

Дополнительная информация

3 голосов
/ 08 января 2012

Используйте Math.Abs(value) <= 1.0 например

0 голосов
/ 08 января 2012

Не очень ясно, но может быть обратным:

Enumerable. Range(-1, 2).Any(x=>x==value).

Кстати не скомпилировал, пишу с мобильного.

редактировать

здесь я использую Enumerable.Range

edit1

если мы говорим о floating point числах, достаточно создать extension method, который генерирует последовательность чисел, указав start number и offset step и после выполнения Any<T> в результирующей коллекции, как в предоставленном aswer .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...