long.tryparse和负值

时间:2012-12-18 20:03:18

标签: c#

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

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

我只想要大于或等于0的数字。我是否还需要测试它是负数还是对负数进行TryParse测试?

感谢。

6 个答案:

答案 0 :(得分:4)

您要么必须测试>= 0,要么使用ulong.TryParse()代替(这不是同一回事,但仍可能符合您的需求)。

答案 1 :(得分:3)

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

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


请注意,最好拨打dictionary.TryGetValue而不是进行单独的ContainsKey()检查。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

不确定这是否合适,但基于显式转换

,这也适用于您
long myLong = -22;
uint myUint = (uint)myLong;  // OK: explicit conversion
//yields 4294967274

答案 5 :(得分:0)

TryParse超载,您可以在其中指定有效数字。

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

Look here关于可能的NumberStyles标志的描述