Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将“块”与“动态”一起使用_C#_Dynamic_Using - Fatal编程技术网

C# 将“块”与“动态”一起使用

C# 将“块”与“动态”一起使用,c#,dynamic,using,C#,Dynamic,Using,如果我写 using (dynamic d = getSomeD ()) { // ... } 这是否意味着在保留using块时调用d.Dispose 当d没有实现IDisposable时会发生什么 这是否意味着在调用using块时调用d.Dispose 左 对。如果该类型实现IDisposable,则将调用Dispose 当d没有实现IDisposable时会发生什么 你会得到一个例外 类型的未处理异常 中出现“Microsoft.CSharp.RuntimeBinder.Runtim

如果我写

using (dynamic d = getSomeD ()) {
   // ...
}
这是否意味着在保留using块时调用d.Dispose

当d没有实现IDisposable时会发生什么

这是否意味着在调用using块时调用d.Dispose 左

对。如果该类型实现IDisposable,则将调用Dispose

当d没有实现IDisposable时会发生什么

你会得到一个例外

类型的未处理异常 中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException” System.Core.dll 无法将类型“YourType”隐式转换为“System.IDisposable”。一 存在显式转换。是否缺少强制转换

您可以通过以下课程自己尝试:

class MyDisposable : IDisposable //Remove IDisposable to see the exception
{
    public void Dispose()
    {
        Console.WriteLine("Dispose called");
    }
}
然后:

using (dynamic d = new MyDisposable())
{

}

RuntimeBinderException就是这样发生的。有没有什么原因让你不能亲自尝试回答这两个问题?或者是尝试这种行为的好方法。以下是我在.NET上的尝试:@Jon:是的,尝试的结果不如知道答案的人的答案可靠。特别是在处理动态时。为了展示研究成果,您应该IMO至少自己尝试过它们-然后记录结果,并要求确认这是保证/指定的行为,IMO。如果任何人对动态引擎盖下发生的事情感到好奇,代码将编译到LINQPad targeting.NET 4中。下面是IL的外观:同样要添加,使用将转换为try/finally块。