为什么这会返回假?

时间:2014-03-30 04:04:15

标签: c# boolean logic

所以我有这个检查方法,如果满足所有参数则返回true,否则返回false。我的问题是......为什么(c< =' a'& c> =' z' || c ==' /&# 39;)当输入:

时等于假

fiddler 01010100 10011100 / ro

*行标记为

public static bool check(string action)
{
    string[] arguments = action.Split(' ');
    if (arguments.Length > 3)
    {
        string[] time = { arguments[1], arguments[2] };
        for (int i = 1; i < time.Length; i++)
        {
            if (i == 1 || i == 2)
                foreach (char c in time[i])
                {
                    if (c >= '0' && c <= '9') { }
                    else return false;
                }
            else break;
        }
        for (int i = arguments.Length - 1; i >= 3; i--)
        {
            if (i != 1 || i != 2 && arguments[i] != "")
            {
                foreach (char c in arguments[i])
                {
     >>> >>> >>>    if (c <= 'a' && c >= 'z' || c == '/') { }
                    else return false;
                }
                if (arguments[i] == " " || arguments[i] == null || call.arguments.Contains(arguments[i]) == true) { }
                else return false;
            }
        }
    }
    else if (arguments.Length == 3)
    {
        for (int i = 1; i <= arguments.Length; i++)
        {
            if (i == 1 || i == 2)
            {
                foreach (char c in arguments[i])
                {
                    if (c >= '0' && c <= '9') { }
                    else return false;
                }
            }
            else
            {
                foreach (char c in arguments[i].ToUpper())
                {
                    if (c <= 'a' && c >= 'z' || c == '/') { }
                    else return false;
                }
                if (arguments[i] == " " || arguments[i] == null || call.arguments.Contains(arguments[i]) == true) { }
                else return false;
            }
        }
    }
    else return false;
    return true;
}

2 个答案:

答案 0 :(得分:2)

在您的代码中,表达式为c <= 'a' && c >= 'z'它们不能同时为true,因此始终为false。你可能想写c >= 'a' && c <= 'z'

答案 1 :(得分:1)

您的代码有很多错误。

首先,在这部分代码中:

string[] time = { arguments[1], arguments[2] };
for (int i = 1; i < time.Length; i++)
{
     if (i == 1 || i == 2)

i永远不等于2,因为(2 >= time.Length)。你应该用这个:

for (int i = 0; i < time.Length; i++)

没有任何检查。

其次,这部分:

for (int i = arguments.Length - 1; i >= 3; i--)
{
    if (i != 1 || i != 2 && arguments[i] != "")

i永远不等于12,因为此检查已经在for声明中。您应该删除此检查以清除代码。

第三,此检查c <= 'a' && c >= 'z'始终为false,因为'z' > 'a'。您可能应该使用此c >= 'a' && c <= 'z'

祝你好运,并且会更加小心!