由于某种原因,当我运行"测试"方法时,我得到一个错误的结果.我使用了关于随机数生成的其他问题中的一些代码,我已经确认这些代码可以正常工作,但需要额外的安全检查.
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)
的C#的实际类型名称float是Single,这就是为什么你的浮法检查失败.更直接的测试是使用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#是否正确进行算术运算.
| 归档时间: |
|
| 查看次数: |
1188 次 |
| 最近记录: |