前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >dynamic遇到了匿名类RuntimeBinderException:“object”未包含“xxx”的定义

dynamic遇到了匿名类RuntimeBinderException:“object”未包含“xxx”的定义

作者头像
孙小北
发布2024-01-30 14:08:56
2620
发布2024-01-30 14:08:56
举报
文章被收录于专栏:孙小北的成长笔记

dynamic遇到了匿名类RuntimeBinderException:“object”未包含“xxx”的定义

养浩然之气,做博学之人

创建一个项目和一个类库, 在类库创建一个匿名对象,然后再在项目中访问它时报错:

代码语言:javascript
复制
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException类型的未经处理的异常在 System.Core.dll 中发生其他信息: “object”未包含“Id”的定义

属性是肯定存在的,那问题出在哪呢?找了一晚上终于搞定。

原因:匿名类型是internal级别,而internal只能只有在同一程序集中访问。在运行时,dynamic想找到另一个程序集中的internal类型的属性,自然会报错。

代码语言:javascript
复制
namespace Test.A
{
    class Program
    {
        static void Main(string[] args)
        {
            var obj = new { Id = 1 };
            var c = new ClassLibrary1.TestClass();
            c.Test(obj);
            Console.ReadLine();
        }
    }
}
代码语言:javascript
复制
namespace Test.B  
{
    public class TestClass
    {
        public void Test(dynamic obj)
        {
            Console.WriteLine(obj.Id);
        }
    }
}

项目A命名空间 Test.A 匿名类型所在

项目B命名空间 Test.B

在Test.B 中通过dynamic关键字调用Test.A中匿名类型时报上述错误

解决办法:

在项目A的AssemblyInfo.cs中加上:

代码语言:javascript
复制
[assembly: InternalsVisibleTo("Test.B")]

解决方法二

将匿名类转换成实体类

参考:

https://blog.csdn.net/feiyun0112/article/details/39697955

http://www.cnblogs.com/ywkpl/p/4724986.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • dynamic遇到了匿名类RuntimeBinderException:“object”未包含“xxx”的定义
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档