Проверка диапазона альфа-метода - PullRequest
0 голосов
/ 05 февраля 2020

Я использую Range метод для получения диапазона значений в алфавитном порядке c IE:

char.TryParse(txtFrom.Text, out char fromValue);
char.TryParse(txtTo.Text, out char toValue);

char[] alphabetRange = Enumerable.Range(fromValue, toValue - 'A' + 1)
                                 .Select(i => (Char)i)
                                 .ToArray();

Так что, если fromValue равно B и toValue равно D, возвращается массив B,C,D, и это правильно.

Проблема в том, что если пользователь использует fromValue в качестве D и toValue в качестве B, как я могу выдать исключение, что это невозможно сделать

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

В качестве альтернативы, вы всегда можете выбрать значения Min и Max между двумя текстовыми полями (независимо от того, какой символ в каком текстовом поле), а затем использовать OrderBy, чтобы либо упорядочить ascending, либо descending в зависимости от того, если fromValue меньше или больше toValue.

Таким образом, если пользователь вводит fromValue как D и toValue как B, вывод будет D, C, B (это то, что я ожидал бы как пользователь).

Например:

char.TryParse(txtFrom.Text, out char fromValue);
char.TryParse(txtTo.Text, out char toValue);

// Get the smallest and largest of the two values
var minVal = Math.Min(fromValue, toValue);
var maxVal = Math.Max(fromValue, toValue);

var alphabetRange = Enumerable.Range(minVal, maxVal - minVal + 1)
    .OrderBy(i => fromValue < toValue ? i : -i)  // If from > to, sort by the negative of i
    .Select(i => (char) i).ToArray();
0 голосов
/ 05 февраля 2020

Я бы не выбрасывал исключение , а просто использовал бы if / else, который показывает окно сообщения, но чтобы проверить, является ли один символ "больше", чем другой, просто используйте >

if (fromValue > toValue)
{
    MessageBox.Show("'to' character must be greater than 'from' character");
}
else
{ 
    // do what you do now
}

Вы также можете сделать такие вещи, как проверка на согласованность, обработку не символьных вводов и т. Д. c.

Я бы также отметил, что вторым параметром Range является длина диапазона вывода, так что я думаю, что вы хотите:

Range(fromValue, toValue - fromValue + 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...