首页 > 编程语言 >C# 匿名类型之 RuntimeBinderException

C# 匿名类型之 RuntimeBinderException

时间:2023-04-13 21:37:32浏览次数:46  
标签:C# dynamic 匿名 RuntimeBinderException 类型 prop1

匿名类型在某些场景下使用起来还是比较方便,比如某个类型只会使用一次,那这个时候定义一个 Class 就没有多少意义,完全可以使用匿名类型来解决,但是在跨项目使用时,还是需要注意避免出现 RuntimeBinderException 问题

问题描述

比如我们有一个 netstandard2.0 类型的类库项目,里面有一个这样的方法:

    public static class StandardClass
    {
        public static dynamic Get()
        {
            return new { prop1 = "hello", prop2 = 12 };
        }
    }

然后在一个 net6.0 类型的控制台项目添加下述实例代码

using ClassLibrary1;

try
{
    var test = StandardClass.Get();
    var prop1 = test.prop1;
}
catch (Exception e)
{
    Console.WriteLine(e);
    throw;
}

这个时候,当我们尝试运行这个控制台项目获取 prop1 值,这个时候,就会喜提 RuntimeBinderException

解决方案

因为匿名类型默认是 Internal 的访问级别。这就意味着如果是同一个程序集中通过Dynamic 类型来访问这个匿名对象是没有问题,但是如果跨程序集就会导致 RuntimeBinder 无法识别这种类型,从而也就引发了 RuntimeBinderException 异常。解决这种问题有 2 种方法:

  • 修改返回类型为强类型,取消匿名类型
  • 添加 InternalsVisibleTo 属性,让 Internal 级别的对象对外暴露(如下图所示)

相关参考

标签:C#,dynamic,匿名,RuntimeBinderException,类型,prop1
From: https://www.cnblogs.com/hippieZhou/p/17316378.html

相关文章

  • codeforces#FF DIV2C题DZY Loves Sequences(DP)
    题目地址:http://codeforces.com/contest/447/problem/CC.DZYLovesSequencestimelimitpertestmemorylimitpertestinputoutputa,consistingof nai, ai + 1, .........
  • CTFSHOW 萌新web10-21
    ctfshow萌新web10-21web10题目提示flag在congfig.php中php中作为执行系统命令的函数:system()passthru()exec()shell_exec()popen()proc_open()pcntl_exec()源码中过滤了system,exec,highlight这三个常用的PHP命令执行函数,绕过过滤条件就可以使用eval()函数执行PH......
  • [转[C# 中感叹号(!) 作用盘点
    原文地址:https://www.cnblogs.com/stulzq/p/14085008.html1.关系运算符#!= 与等号共同组成关系运算符,检查两个操作数的值是否相等,如:A!=B2.逻辑运算符#! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。如:boola=true;boolb=!a;3.nu......
  • java 处理常量字符串过长 & springboot 项目读取 resouces 文件夹下的文件内容
    长字符串起因项目里面有一长串的加密字符串(最长的万多个字符),需要拼接作为参数发送给第三方。如果我们使用枚举定义的话,idea编译的时候就会出现编译报错Error:java:常量字符串过长解决想法网上还有一个说法,说是编译器问题,修改idea工具的编译为eclipse即可......
  • Charles相关
    Charles主要功能有:1、截取各种协议的网络包2、支持修改请求参数3、支持修改返回结果4、支持模拟弱网测试Charles抓包的意义定位问题,因为可以获取发出去的请求,请求头,请求体,返回的数据,所以可以定位是前端的请求问题,还是后端的返回问题,或者是前端对返回取值的问题。测试同学就可......
  • ZOJ 3348 Schedule(map运用+网络流之最大流)(竞赛问题升级版)
    题目地址:ZOJ3348仍然是一道竞赛问题的网络流问题,但是这道题再用上次的竞赛建图方法就不行了,5000场比赛,明显会超时,于是需要换种建图思路了。上一道经典竞赛问题戳这里上一道的胜负转换是利用专门给比赛建一个点,通过对比赛双方的流向来控制胜负关系,这里的建图方法更加巧妙(膜拜想出这......
  • Codeforces Round #257 (Div. 1)B题Jzzhu and Cities(spfa+slf优化)
    题目地址:http://codeforces.com/contest/450/problem/D这题有重边,需要去重。。sad。当时居然没看见。。这题只要引入一个最短路条数,然后再遍历火车线,如果最短路与火车线长度相等,此时如果最短路条数是1的话,那说明这个最短路就是火车线,不能去掉,如果最短路条数大于1条,说明除了这条火车......
  • ORACLE还原恢复启动时数据库报ORA-00704, ORA-00604, ORA-00904
    Oracle数据库还原恢复后,执行alterdatabaseopenresetlogs时遇到下面错误。如下所示:SQL> alter database open resetlogs;alter database open resetlogs*ERROR at line 1:ORA-00603: ORACLE server session terminated by fatal errorORA-01092: ORACLE ins......
  • [USACO12MAR]Flowerpot S 单调队列
    [USACO12MAR]FlowerpotStag:单调队列很惭愧,今天发现自己连滑动窗口都不会了,遂做了一些题两滴水的高度之差大于等于D的情况下的最小花盆宽度暴力思路:对于任意两点求水滴高度差是否大于等于D,若大于等于\(D\)则计算最下的两点距离\(w\)但这显然是能过但不完全过,手玩一下样例,是......
  • Educational Codeforces Round 146 (Rated for Div. 2)
    Preface补题ing值得一提的时补这场的时候先是遇上了CF的12小时大维护,后面又遇到了评测机崩了测不了也是有点有意思的说A.Coins傻逼题,首先考虑\(2|n\)时一定有解\(x=\frac{n}{2},y=0\),否则若\(2\nmidn\and2|k\)则由裴蜀定理知此时一定无解否则\(y\)必为奇数,我们令\(x=\fra......