在C#中的Convert.ToInt32

3

我的问题是,当我想将(result[i].JobOrder)转换为整数时,我有一个字符串120100在(result[i].JobOrder)中。但返回的不是整数,而是类似于"0x0001d524"的东西。我无法理解为什么会这样。

for (int i = 0; i < result.Count; i++)
{
    if (Convert.ToInt32(result[i].JobOrder) > maxJobOrder)
    {
        maxJobOrder = Convert.ToInt32(result[i].JobOrder);
    }
}

6
看起来像是整数。关闭十六进制显示。 - harold
4个回答

15
你的代码可以运行,但是你已经将调试器设置为以十六进制显示整数。值0x0001d524是整数120100的十六进制表示形式。
这不是程序中的错误,而是IDE的配置选项。如果你使用Visual Studio,你可以通过按下“Debug”工具栏中的“Hex”按钮来更改此设置。

Hex button


作为旁注,如果您使用的是C# 3或更高版本,您可以通过使用Max方法来查找最大值,而无需循环来简化代码:
maxJobOrder = result.Max(x => int.Parse(x.JobOrder));

1
+1,非常好的答案!我想补充一点,您可能需要提前将JobOrder保存为数字。 - SimpleVar

1

1
那怎么回答问题呢? - CodesInChaos
我曾认为它可能是解决方案,但显然不是。 - Miroslav Šiagi

1

尝试使用int.parse()代替Convert.ToInt32


1
那怎么回答问题呢? - CodesInChaos

0
建议使用int.parse的方法存在一些缺陷。
无论何时int.parse失败,都会抛出以下异常之一。它只接受字符串作为输入进行转换。
ArgumentNullException
FormatException 
OverflowException

Convert.ToInt32 在失败时会抛出以下异常之一。此外,它允许传递空值,但这意味着它将返回0作为输出值,并且它还处理多个数据类型转换为整数。

FormatException 
OverflowException

int.TryParse不会抛出任何异常,但它将返回0作为输出值,因为该方法返回false,并且它只接受字符串作为输入进行转换。

你应该选择适合工作的正确工具,以防止解决方案完整性问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接