为什么将字符串转换或解析为 int 返回零?

发布于 2024-10-28 20:09:45 字数 669 浏览 3 评论 0原文

为什么将字符串转换/解析为 int 返回 0/零?

在调试时,使用断点,我可以看到“3”作为字符串值发布到浏览操作,但是当我如上所述转换为 int 时,该值将转换为 int 类型的 0 值。

    //
    // GET: /Event/Browse
    public ActionResult Browse(string category)
    {
        int id = Convert.ToInt32(category);


        // Retrieve Category and its Associated Events from database
        var categoryModel = storeDB.Categories.Include("Events").Single(g => g.CategoryId == id);
        return View(categoryModel);
    }

查看下图以更好地理解: 在此处输入图像描述

另一个图像 -categoryModel 在 LINQ 查询上获取 null。 在此处输入图像描述

Why converting / parsing string to int return 0 / zero?

On debug, using the breakpoint, I could see "3" posted to browse action as a string value but when i convert to int as above, the value is converted to 0 value of int type.

    //
    // GET: /Event/Browse
    public ActionResult Browse(string category)
    {
        int id = Convert.ToInt32(category);


        // Retrieve Category and its Associated Events from database
        var categoryModel = storeDB.Categories.Include("Events").Single(g => g.CategoryId == id);
        return View(categoryModel);
    }

Take a look at the image below for better understanding:
enter image description here

Another image - categoryModel getting null on LINQ query.
enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

樱&纷飞 2024-11-04 20:09:45

来自 MSDN 上的 Int32.TryParse 此处

当该方法返回时,包含
32 位有符号整数值等效值
到 s 中包含的数字,如果
转换成功,或零,如果
转换失败。
转换
如果 s 参数为 nullptr,则失败,
格式不正确,或者
表示小于 MinValue 的数字
或大于 MaxValue。这
参数未初始化就传递。

From MSDN on Int32.TryParse here

When this method returns, contains the
32-bit signed integer value equivalent
to the number contained in s, if the
conversion succeeded, or zero if the
conversion failed.
The conversion
fails if the s parameter is nullptr,
is not of the correct format, or
represents a number less than MinValue
or greater than MaxValue. This
parameter is passed uninitialized.

我爱人 2024-11-04 20:09:45

如果您的 Parse() 调用失败并且您的异常未被捕获,或者您没有测试 TryParse() 的返回值,那么 int 变量肯定会保持原样 - 默认初始化为零。

例如,这将使您的 int 保持为零:

int i;
Int32.Parse("FAIL!");
// i is still a zero.

因此,请尝试以下操作:

int i;
bool parseSuccessful = Int32.TryParse("123", out i);
// parseSuccessful should be true, and i should be 123.

或者看到它优雅地失败:

int i;
bool parseSuccessful = Int32.TryParse("FAIL!", out i);
// parseSuccessful should be false, and i should be 0.

If your Parse() call fails and your exception is uncaught or you don't test the return value of TryParse(), then surely the int variable would remain as it was - initialized by default to zero.

For example, this would keep your int a zero:

int i;
Int32.Parse("FAIL!");
// i is still a zero.

So instead try this:

int i;
bool parseSuccessful = Int32.TryParse("123", out i);
// parseSuccessful should be true, and i should be 123.

Or to see it fail gracefully:

int i;
bool parseSuccessful = Int32.TryParse("FAIL!", out i);
// parseSuccessful should be false, and i should be 0.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文