C# if内的Out参数被视为未分配

C# if内的Out参数被视为未分配,c#,C#,我有一段代码: //EDIT DateTime finalDate; Dictionary<string, string> a = new Dictionary<string, string>() { { "a", "2016-04-14T11:56:56.0319859+02:00" } }; string dateStr; DateTime date; if (json.TryGetValue("a", out dateStr) && DateTime

我有一段代码:

//EDIT
DateTime finalDate;
Dictionary<string, string> a = new Dictionary<string, string>() { { "a", "2016-04-14T11:56:56.0319859+02:00" } };
string dateStr;
DateTime date;
if (json.TryGetValue("a", out dateStr) && DateTime.TryParse(dateStr, out date))
{
   finalDate = date;
}
//编辑
最终日期;
字典a=新字典({“a”,“2016-04-14T11:56:56.0319859+02:00});
字符串dateStr;
日期时间日期;
if(json.TryGetValue(“a”,out-dateStr)和&DateTime.TryParse(dateStr,out-date))
{
最终日期=日期;
}
但是我在if“使用未分配的局部变量‘myDate’”中有一个错误。 如果我没有错,如果执行此部分,则myDate必须由TryParse分配(从技术上讲,即使条件为false,也应该分配),如果我将TryParse放在If中,则它可以工作。 有什么方法可以告诉编译器它是正常的吗?

如果不满足第一个条件,语句短路,则不能保证设置它

您需要将
myDate
设置为一个值

 DateTime myDate = DateTime.MinValue;

通过此评论解决:


我猜您没有提到的重要部分是json被声明为动态的。在这种情况下,这是一个已知问题。


不信者达米恩

你能帮我发一封信吗?我不能让它以您描述的方式失败(使用Linqpad)。如果我们使用的是
|
,而不是
&&
,那么它将失败。我无法在VS2015中重现此编译器错误,您能给出一个真正产生此错误的示例吗?或者,在哪个IDE中会出现该错误?这是编译器错误还是您使用了其他静态分析插件?我想您没有提到的重要部分是
json
声明为
dynamic
。在这种情况下,这是一个错误。@Gatoyu-我想相信你,但是更新的代码仍然使用
json
而不是
a
它仍然不完整,而且,如果这是你运行的版本,它仍然没有使用
字典
@Damien\u不信者我的错,这是因为动态,谢谢。这是一个
&
条件,所以为了进入if,你必须对这两个条件都进行了评估……除了它说它在
if
块内未初始化……但是在
if
块内,它应该得到保证,因为只有在调用第二个
TryParse
时,你才能到达那里。