有效范围alpha方法

问题描述 投票:0回答:2

我使用Range方法来获取字母I.E中值的范围:

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();

因此,如果fromValueB并且toValueD,它将返回B,C,D的数组,这是正确的。

问题是,如果用户将fromValue用作D,将toValue用作B,如何抛出无法完成的异常?

c# range
2个回答
0
投票

我不会抛出exception,而只是使用一个显示消息框的if / else,但是要检查一个字符是否比另一个字符“更大”,只需使用>

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

您还可以执行诸如检查大小写一致,处理非=字符输入等操作

我还要注意,Range的第二个参数是输出范围的length,所以我认为您想要:

Range(fromValue, toValue - fromValue + 1)

0
投票

或者,您始终可以在两个文本框之间选择MinMax值(无论哪个字符位于哪个文本框中),然后根据需要使用OrderBy来对ascendingdescending进行排序如果fromValue小于或大于toValue,则打开。

这样,如果用户输入from = 'c'; to = 'a',则输出将为c, b, a

例如:

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();
© www.soinside.com 2019 - 2024. All rights reserved.