【发布时间】:2021-05-27 22:26:42
【问题描述】:
今天我(错误地)遇到了一个奇怪的编译器错误,我不明白它的原因(可能是编译器问题?)。 .Net Framework 4.0 和 Visual Studio 2019(如果重要)。
确切的错误是TryParse 之后的 if 处的“使用未分配的局部变量‘值’”。
如果我使用s 或将d.s 转换为字符串,代码编译得很好。
using System;
using System.Dynamic;
namespace TestConsoleApp
{
static class Program
{
static void Main(string[] _)
{
string s = "1";
dynamic d = new ExpandoObject();
d.s = s;
if (d.s != null && int.TryParse(d.s, out int value))
{
if (value == 1)
{
Console.Out.WriteLine("OK!");
}
}
}
}
}
【问题讨论】:
-
仅供参考,null 检查是多余的,因为 int.TryParse 正确处理了它。这也将避免编译器错误。是的,对我来说这看起来像一个编译器错误。
-
@TimSchmelter 确实! :O 在我的生产代码中,我使用的是
Enum.TryParse,但我测试过,它具有类似的null输入行为。 -
顺便说一句,您可以展平两个 if 语句
if (int.TryParse(d.s, out int value) && value == 1) { ... } -
这是我的生产代码的过度简化版本
标签: c# .net compiler-errors .net-4.0