3

我的问题是,当我想转换(result[i].JobOrder)为 int 时。我有一个字符串 120100 in (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);
    }
}
4

4 回答 4

15

您的代码有效,但您已将调试器设置为以十六进制显示整数。值 0x0001d524 是整数 120100 的十六进制表示。

这不是程序中的错误,而是您的 IDE 的配置选项。如果您使用 Visual Studio,您可以通过按“调试”工具栏中的“十六进制”按钮来更改此设置。

六角按钮


顺便说一句,如果您使用的是 C# 3 或更高版本,您可以通过使用该Max方法来简化代码来查找最大值而不是循环:

maxJobOrder = result.Max(x => int.Parse(x.JobOrder));
于 2012-06-23T09:25:44.317 回答
1

尝试使用 Int32.TryParse 参见 http://msdn.microsoft.com/en-us/library/f02979c7.aspx

于 2012-06-23T09:27:07.260 回答
1

尝试替换Convert.ToInt32int.parse()

于 2012-06-23T09:27:12.743 回答
0

使用 int.parse 的建议略有缺陷。

每当失败时, int.parse都会抛出以下异常之一。它只接受字符串作为转换的输入。

ArgumentNullException
FormatException 
OverflowException

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

FormatException 
OverflowException

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

您应该为工作选择正确的工具,以防止解决方案的完整性出现任何问题。

于 2013-01-16T09:10:22.013 回答