dynamic与匿名对象

mac2022-06-30  22

用dynamic接收匿名对象很方便,因为不需要去定义model了,但是也有一个弊端,就是匿名对象的作用范围是internal的,也就是只能存在于当前程序域,所以用dynimic跨程序域去接收一个匿名对象,显而易见是接收不到的

那么有什么好的解决办法么

第一种

[assembly: InternalsVisibleTo("A.B.BLL")]

这种做法破坏了所有internal修饰类的访问限制

第二种

将dynamic封装在一个通用的对象中

public class DynamicModel { /// <summary> /// key /// </summary> public string DynamicKey { get; set; } /// <summary> /// object /// </summary> public dynamic DynamicObj { get; set; } }

这种做法就可以跨程序域传递参数了

第三种

使用委托

biz.TestDynamic(()=>new {name=1 });

 

public void TestDynamic(Func<dynamic> pre) { var a= pre(); }

 

所以纵观这些方法,感觉委托对跨程序域传递匿名对象还是很方便的,另外linq、EF中很多匿名对象的跨程序域传递也是采用的委托的实现方式

 

转载于:https://www.cnblogs.com/njcxwz/p/5943033.html

相关资源:详解C# 匿名对象(匿名类型)、var、动态类型 dynamic
最新回复(0)