C# 匿名类型之 RuntimeBinderException

匿名类型在某些场景下使用起来还是比较方便,比如某个类型只会使用一次,那这个时候定义一个 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# 匿名类型之 RuntimeBinderException

相关参考

原文链接:https://www.cnblogs.com/hippieZhou/archive/2023/04/13/17316378.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 匿名类型之 RuntimeBinderException - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • 聊聊.Net,Core配置Nlog.md的问题

    聊聊.Net Core配置NLog NLog是一个流行的日志记录库,它可以帮助我们在应用程序中记录日志。在本攻略中,我们将介绍如何在.Net Core应用程序中配置NLog,以便记录日志。以下是聊聊.Net Core配置NLog的完整攻略: 步骤一:安装NLog 首先,需要安装NLog。可以使用以下命令在.Net Core应用程序中安装NLog: dotne…

    C# 2023年5月17日
    00
  • C# Linq的Skip()方法 – 跳过序列中指定数量的元素并返回剩余元素

    当使用LINQ(C# language integrated query)对集合进行查询时,我们经常需要对查询结果进行排序、筛选、分组和投影等操作。而 Skip() 方法是其中一个很有用的操作之一。 一、Skip()方法的概述 Skip() 方法是用来跳过指定数量的元素并返回剩余元素的 LINQ 方法。Skip() 方法跳过序列中的从头开始的指定数量的元素,…

    C# 2023年4月19日
    00
  • C# 读取指定路径配置文件的方法

    下面是关于“C# 读取指定路径配置文件的方法”的完整攻略: 第一步:准备配置文件 在C#中,我们可以通过配置文件来保存程序运行时所需的参数和配置信息。配置文件一般采用XML格式,以提高数据的可读性和可维护性。 示例配置文件的内容如下: <?xml version="1.0" encoding="utf-8" ?&…

    C# 2023年6月1日
    00
  • c#中分割字符串的几种方法

    当在c#中需要对字符串进行分割时,有多种方法可供选择,包括使用Split方法、正则表达式、Substring方法等等。下面将具体介绍这些方法的使用。 使用Split方法 Split方法是最简单的分割方法,它可以根据指定的字符或字符串将原字符串拆分成一个字符串数组。 语法如下: string[] result = originalString.Split(ne…

    C# 2023年6月7日
    00
  • C#中实现输入汉字获取其拼音(汉字转拼音)的2种方法

    C# 中实现输入汉字获取其拼音,通常有两种方法: 1.使用第三方库 pinyin4net pinyin4net 是一个流行的 C# 第三方库,用于将汉字转化为拼音。其基于 python 编写,提供了简单易用的 API。 安装过程 可以通过 NuGet 安装 pinyin4net 包,也可以直接到官网下载源代码。 具体安装步骤: 在 Visual Studio…

    C# 2023年6月7日
    00
  • C# Directory.Exists – 判断目录是否存在

    Directory.Exists是C#中用于判断指定路径的文件夹是否存在的方法,其返回值为布尔类型,如果存在则返回true,否则返回false。 Directory.Exists方法的使用方法: bool exists = Directory.Exists(path); 其中,path参数为字符串类型的要检查的目录路径。此时exists变量的值为true或f…

    C# 2023年4月19日
    00
  • C/C++/C#

    C/C++/C# 入门攻略 C、C++ 和 C# 都是广泛使用的编程语言,被用于各种用途。下面是一个逐步学习这些语言的攻略。 1. 学习 C 语言 如果您是一个新手程序员,那么学习 C 语言会是一个不错的开始。C 语言是一种结构化编程语言,许多其他语言都从 C 语言中继承了部分特性。下面是学习 C 语言的一些步骤: 1.1 安装 C 语言开发环境 首先需要在…

    C# 2023年5月15日
    00
  • C#查找对象在ArrayList中出现位置的方法

    Markdown格式说明: 标题使用#号进行标记 代码块使用“`标记开头和结尾 示例说明使用文本加代码块结合的方式 C#查找对象在ArrayList中出现位置的方法 在 C# 中,可以使用 ArrayList 类型来存储一些对象。有时候我们需要查找某个对象在 ArrayList 中出现的位置,这时候可以使用以下方法对 ArrayList 进行搜索: int…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部