gpt4 book ai didi

c# - "Use of unassigned local variable"在 if 语句中与 TryParse 一起使用动态

转载 作者:太空狗 更新时间:2023-10-30 01:16:11 24 4
gpt4 key购买 nike

我刚刚在 VS2015 .Net v4.5.2 控制台应用程序中输入了以下代码:

dynamic fromString = "blah", toString = "blah2";
DateTime fromDate, toDate;
if (DateTime.TryParse(fromString.ToString(), out fromDate) && DateTime.TryParse(toString.ToString(), out toDate)) {
Console.WriteLine(fromDate);
Console.WriteLine(toDate);
}

有点出乎意料,我收到错误“使用未分配的局部变量 toDate”。我没有预料到它,因为仅当从第二个 TryParse 为“toDate”赋值时,才会输入 if 语句。

不用说,可以通过为“toDate”赋值来解决这个问题:

DateTime fromDate, toDate = DateTime.MinValue;

或将 && 更改为 &,以便无论第一个失败都执行两个 TryParses。

但是,我想知道为什么会出现错误?如果变量 fromString 和 toString 是字符串,则不会发生错误,编译器也不会给出 toDate 未分配的错误。因此我想知道为什么编译器以不同的方式对待 stringdynamic.ToString()

最佳答案

这是因为您使用了短路运算符 &&,这意味着如果第一个 TryParse 返回 false,则永远不会执行第二个 TryParse,从而使 ToDate 变量未分配。

尝试一下,将 && 替换为 &,您的错误将消失,因为现在将始终执行两个 TryParse 调用。

编译器不够聪明(它不分析你的逻辑)知道在某些情况下不会执行里面的代码。

编辑:@Simon,我重新阅读了你的问题,发现你已经知道了这一点......也许是因为 .ToString 总是存在于一个对象上但并不总是存在于一个动态对象上(例如当它是一个 com 对象时), 在那种情况下编译器会做更少的检查?

关于c# - "Use of unassigned local variable"在 if 语句中与 TryParse 一起使用动态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36059474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com