号码不是号码?

Rag*_*ave -10 c# numbers

由于某种原因,当我运行"测试"方法时,我得到一个错误的结果.我使用了关于随机数生成的其他问题中的一些代码,我已经确认这些代码可以正常工作,但需要额外的安全检查.

public class strUtls
{
    public void test()
    {
        var maybe = 40000000f * 40000000f;
        bool number = isNumber(maybe);
    }

    public bool isNumber(object O)
    {
        // INT16,INT32,INT64,DOUBLE,FLOAT
        if (upper(O.GetType().ToString()).Contains("INT") || upper(O.GetType().ToString()).Contains("DOUBLE") || upper(O.GetType().ToString()).Contains("FLOAT"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    private string upper(string s)
    {
        try
        {
            for (int i = 0; i < s.Length; i++)
            {
                s = s.Replace(s[i], upper(s[i]));
            }

            return s;
        }
        catch (IndexOutOfRangeException)
        {
            return s;
        }
    }

    private char upper(char S)
    {
        switch (s)
        {
            case ('a'):
                return 'A';
                break;
            case ('b'):
                return 'B';
                break;
            case ('c'):
                return 'C';
                break;
            case ('d'):
                return 'D';
                break;
            case ('e'):
                return 'E';
                break;
            case ('f'):
                return 'F';
                break;
            case ('g'):
                return 'G';
                break;
            case ('h'):
                return 'H';
                break;
            case ('i'):
                return 'I';
                break;
            case ('j'):
                return 'J';
                break;
            case ('k'):
                return 'K';
                break;
            case ('l'):
                return 'L';
                break;
            case ('m'):
                return 'M';
                break;
            case ('n'):
                return 'N';
                break;
            case ('p'):
                return 'O';
                break;
            case ('o'):
                return 'P';
                break;
            case ('q'):
                return 'Q';
                break;
            case ('r'):
                return 'R';
                break;
            case ('s'):
                return S;
                break;
            case ('t'):
                return 'T';
                break;
            case ('u'):
                return 'U';
                break;
            case ('v'):
                return 'V';
                break;
            case ('w'):
                return 'W';
                break;
            case ('x'):
                return 'X';
                break;
            case ('y'):
                return 'Y';
                break;
            case ('z'):
                return 'Z';
                break;
            default:
                return s;
                break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jac*_*cob 5

的C#的实际类型名称floatSingle,这就是为什么你的浮法检查失败.更直接的测试是使用is或直接Type比较:

private static HashSet<Type> validNumericTypes = new HashSet<Type> { 
    typeof(int), typeof(uint), typeof(short), typeof(ushort), typeof(long),
    // etc.
};

// ...

return validNumericTypes.Contains(O.GetType());
Run Code Online (Sandbox Code Playgroud)

当然,我不知道为什么你必须测试C#是否正确进行算术运算.