我有一个预定义的字符串数组,其中包含从A
to的字母Q
:
string[] SkippedAreasArray = new string[] {"A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N", "O", "P", "Q"};
在TextBox
内部 Windows 窗体中,用户可以像这样输入 skippedAreas:A,B,C,D...
验证和限制只能使用字母和逗号,因此保证输入是这种格式。
我所做的是接受用户输入并填充另一个字符串数组:
string[] SkippedAreasFromForm = new string[17];
...
SkippedAreasFromForm = (txtSkippedAreas.Text).Split(',');
现在是我正在寻求帮助的棘手部分。用户必须输入Number of areas
例如 - 3。这意味着他只使用A
、B
和C
。如果区域数为 2,则他只能使用A
,B
如果区域数为 4,则A
、B
、C
和D
可用,依此类推。
我需要检查在SkippedAreasFromForm
填充了用户输入的数组中是否存在与上述条件不匹配的区域。
这在编码方面意味着什么 - 我需要从 中获取每个元素 SkippedAreasFromForm
,从预定义中获取它的整数值,SkippedAreasArray
并查看该值是否等于或大于他输入为“区域数”的值 (>=)。如果存在超出所选数字范围的区域,则应显示错误。
我现在拥有的是:
foreach (string tempAreaValue in SkippedAreasFromForm)
{
for (int i = 0; i < SkippedAreasArray.Length; i++)
{
if (tempAreaValue == SkippedAreasArray[i])
{
if ((i + 1) > entity.AreasCnt)
{
MessageBox.Show("You must use areas only within the Number of Areas scope!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtSkippedAreas.Focus();
return false;
}
}
}
}
对于少数测试,我使它有效。但首先 - 至少对我来说它似乎过于复杂。其次 - 我不确定这个算法是否完全按照我的需要工作,或者我只是幸运地得到了正确的结果。第三 - 我现在正在编写 C# 代码 2 个月,在我看来,这似乎是 LINQ 表达式的绝佳候选者 - 你认为使用 LINQ 会更好吗,我希望能在转换中提供帮助。