Krz*_*tof 3 .net c# azure azure-cosmosdb
我在DocumentDB文档中找到了这段代码:
SalesOrder readOrder = (SalesOrder)(dynamic)response.Resource;
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下C#如何知道如何将动态对象转换为SalesOrder类的这个对象?我尝试过这种天真的方法,但它不起作用:
class SampleClass { public string Name { get; set; } }
object o = new { Name = "test" };
SampleClass casted = (SampleClass)(dynamic)o; // this won't work
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能以与链接示例中相同的方式进行转换?
你的代码......
object o = new { Name = "test" };
SampleClass casted = (SampleClass)(dynamic)o; // this won't work
Run Code Online (Sandbox Code Playgroud)
...不起作用,不是因为中间转换dynamic,而是因为你的匿名类和SampleClass.之间的类型不匹配.
不要dynamic与匿名类混淆.没有类型的对象dynamic,它主要是针对编译器的.另一方面,匿名类是在编译时存在的完全类型安全的类.除非您不知道名称,否则非匿名类没有区别.编译器将在底层创建一个完整的类定义(使用反编译器检查).
这也是您的作业的问题.您可以尝试将匿名类的对象分配给类型的变量SampleClass.这不起作用(并且它们共享Name属性并不重要).你可以和尝试指派string,int或任何其他类型的(除了SampleClass),其结果将是完全一样的.
始终牢记C#是强类型的.在像JavaScript这样的弱类型语言中,你的任务就可以了.在C#中不是这样.
更新(来自问题评论的信息):
你的任务......
SalesOrder readOrder = (SalesOrder)(dynamic)response.Resource;
Run Code Online (Sandbox Code Playgroud)
......在一个重要方面是不同的.转换后的类型实现了IDynamicMetaObjectProvider接口.强制转换dynamic使编译器识别此接口.然后,它可以注入代码以进行转换以SalesOrder使用该接口.它将导致完全不同的代码,这些代码将执行与常规类型转换无关的源对象的动态运行时转换.
| 归档时间: |
|
| 查看次数: |
641 次 |
| 最近记录: |