0

我正在编写一个自定义 JavascriptConverter 并且我正在测试接收到的密钥是否是这样的类型:

if (dictionary.ContainsKey("SomeID"))
{
if (long.TryParse(serializer.ConvertToType<string>(dictionary["ContactID"]), out TheTableID))
{...}

我只想要大于或等于 0 的数字。我是否还需要测试它是否为负数,或者 TryParse 是否测试负数?

谢谢。

4

6 回答 6

4

您要么必须测试>= 0,要么ulong.TryParse()改用(这实际上不是一回事,但仍可能满足您的需求)。

于 2012-12-18T20:05:23.117 回答
3

TryParse显然不检查负数。毕竟-1234567890是有效的long

相反,您可以添加&& TheTableID >= 0或使用ulong.TryParse


请注意,最好打电话dictionary.TryGetValue而不是单独ContainsKey()检查。

于 2012-12-18T20:05:10.060 回答
1

TryParse不测试负数,它只测试数字是否有效long。解析后,您需要单独检查以确定它的符号。

于 2012-12-18T20:05:11.980 回答
0

是的,如果您只想要正数,您还需要测试是否为负数。TryParse 不测试极性。 http://msdn.microsoft.com/en-us/library/zc2x2b1h.aspx

于 2012-12-18T20:06:26.747 回答
0

不确定这是否正确,但这也可以基于显式转换为您工作

long myLong = -22;
uint myUint = (uint)myLong;  // OK: explicit conversion
//yields 4294967274
于 2012-12-18T20:12:14.630 回答
0

TryParse有一个重载,您可以在其中指定什么是有效数字。

if (long.TryParse(str, NumberStyles.None, CultureInfo.InvariantCulture, out value)
   Console.WriteLine("Long with only digits, no sign, blanks or separators");

在此处查找可能的 NumberStyles 标志的描述

于 2012-12-19T20:19:44.647 回答