相关疑难解决方法(0)

“使用未分配的局部变量”在带有 TryParse 的 if 语句中使用动态

我刚刚在 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); 
}
Run Code Online (Sandbox Code Playgroud)

出乎意料的是,我收到错误“使用未分配的局部变量 toDate”。我没想到,因为只有在从第二个 TryParse 中为“toDate”分配了一个值时,才会输入 if 语句。

不用说,它可以通过为 'toDate' 分配一个值来解决:

DateTime fromDate, toDate = DateTime.MinValue;
Run Code Online (Sandbox Code Playgroud)

或者将 && 更改为 & 以便无论第一次失败如何都会执行两个 TryParses。

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

c# .net-4.5.2

7
推荐指数
2
解决办法
1746
查看次数

C#4:确定动态调用中的参数传递语义

在C#4中,当从DynamicObject派生并覆盖TryInvokeMember时,如何确定在调用站点提供的任何参数是否已通过out或ref语义传递?我可以在提供的绑定器中看到包含此​​信息的一些私有字段(即Microsoft.CSharp.RuntimeBinder.ICSharpInvokeOrInvokeMemberBinder.ArgumentInfo属性),但它似乎无法访问.我认为这些信息必须在某处可用,否则会严重限制一个人对所提供输入的了解.

c# dynamic

5
推荐指数
1
解决办法
530
查看次数

标签 统计

c# ×2

.net-4.5.2 ×1

dynamic ×1