为什么 C# 编译器从这段代码创建 PrivateImplementationDetails ?

2024-01-09

我发现下面的代码:

public static class MimeHelper
    {
        public static string GetMimeType(string strFileName)
        {
            string retval;
            switch (System.IO.Path.GetExtension(strFileName).ToLower())
            {
                case ".3dm": retval = "x-world/x-3dmf"; break;
                case ".3dmf": retval = "x-world/x-3dmf"; break;
                case ".a": retval = "application/octet-stream"; break;
                // etc...
                default: retval = "application/octet-stream"; break;
            }
            return retval;
        } 
    }

导致编译器创建这个无名称空间的内部类(从 Reflector 复制):

<PrivateImplementationDetails>{621DEE27-4B15-4773-9203-D6658527CF2B}
    - $$method0x60000b0-1 : Dictionary<String, Int32>
    - Used By: MimeHelper.GetMimeType(String) : String

这是为什么? 我如何更改上面的代码,这样它就不会发生(只是出于兴趣)

Thanks

Andrew


它创建字典来处理 switch 语句中各种情况的查找,而不是从中创建多个分支 if 来设置返回值。相信我——你不想改变它的运作方式——除非你想让地图变得明确。

ASIDE:我最初假设字典存储了从每个案例到另一个映射的索引的映射以获取返回值。根据@Scott(参见评论),它实际上存储了应该针对该情况执行的代码的标签索引。当您考虑到为每种情况执行的代码可能不同并且可能比给定示例长得多时,这绝对有意义。

EDIT:根据您的评论,我想我可能会想将映射存储在外部配置文件中,在启动期间读取它们,并构建实际的映射 - 从键到值的单级映射或类似的多级映射从键到索引以及索引到值。我认为在配置文件中维护这些映射比每次需要添加或删除特定情况时更新代码更容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 C# 编译器从这段代码创建 PrivateImplementationDetails ? 的相关文章

  • 如何获取正在访问 ASP.NET 应用程序的当前用户?

    为了获取系统中当前登录的用户 我使用以下代码 string opl System Security Principal WindowsIdentity GetCurrent Name ToString 我正在开发一个 ASP NET 应用程
  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • R cor.test:“有限观察不足”

    我目前正在尝试创建一个 R 函数 计算指定列与数据帧的所有数字列的 corr test 相关性 这是我的代码 function returning only numeric columns only num lt function data
  • 使用 Spring Batch 从 Oracle DB 读取数据时如何阻止连接关闭?

    我有一个带有 Spring boot 应用程序的 Spring Batch 其中我从外部 Oracle DB 读取数据并将其写入生产环境中的 SQL Server 我在读取数据之前验证连接 但即使这样也会出现 关闭连接 问题 有人知道这个问
  • 将空格、%20 和 + 替换为连字符 [重复]

    这个问题在这里已经有答案了 可能的重复 301 带空格重定向 https stackoverflow com questions 5821120 301 redirect with spaces 现在我将每个图像重定向到包含该图像的 htm
  • 更改 p12 文件的密码

    我从客户端转发了带有推送证书的 p12 文件 我可以更改此 p12 文件的密码吗 如果可以 我可以使用如下内容 openssl pkcs12 in Certificates p12 out temp pem passin pass pass
  • RESTful API 和批量操作

    我有一个中间层 它在共享数据库上执行 CRUD 操作 当我将产品转换为 NET Core 时 我想我还会考虑使用 REST 作为 API 因为 CRUD 应该是它擅长的地方 看起来 REST 对于单条记录操作来说是一个很好的解决方案 但是当
  • Visual Studio 2013 网站刷新/重新启动忽略代码更改

    当我在 VS2013 中有一个网站 无论是 Web 应用程序还是 Web 类型项目 并且我对代码进行了更改 例如 JS 更改或 HTML 更改 时 此更改不会在浏览器中反映出来刷新 以下是我尝试过的事情not work 清除浏览器缓存 重新
  • 从 Netbeans 中的按钮获取正确的文本

    public class tCalculator implements ActionListener private JTextField resultText public void Calculator btn1 addActionLi
  • Jetty 中的 keyStorePassword 和 keyManagerPassword 有什么区别?

    我正在寻找 Jetty 的 SSL http wiki eclipse org Jetty Reference SSL Connectors http wiki eclipse org Jetty Reference SSL Connect
  • NoSql 带有我自己的自定义二进制文件?

    最初 我只需要处理 1 5 TB 的数据 由于我只需要快速写入 读取 无需任何 SQL 因此我设计了自己的平面二进制文件格式 使用python 并轻松 并且愉快地 保存我的数据并在一台机器上对其进行操作 当然 出于备份目的 我添加了2台机器
  • 椭圆形不起作用

    我有一个 TextView 我使用 setText 设置文本 在属性中 我设置了 Ellipsize END Lines 1 Gravity Left Scroll Horizontal False 但这会剪辑额外的文本 从找到最后一个空格
  • 如何对各个字段进行 LDAP 搜索

    我需要在身份验证后从 LDAP 检索各种值 例如描述 办公室等 我已经能够完成身份验证 但无法检索其他值 我应该使用什么名称来检索完整的数据 请帮忙 我的代码如下 public boolean authenticate String use
  • 为 C/FFI 库调用分配对象

    我有一个 C 库 其中有 gpio 实现 gpio type 是特定于目标的 每个 MCU 对 gpio type 都有不同的定义 库中的函数之一 void gpio init gpio type object int32 t pin 我想
  • AttributeError:模块“tensorflow.compat”没有属性“v1”Tensorflow v:1.10.0

    当我尝试训练我的模型时 我遇到了这个错误 tensorflow1 C tensorflow1 models research object detection gt python train py logtostderr train dir
  • discord.py 的颜色代码

    我发现在discord py 中更改颜色 例如嵌入颜色 有点困难和烦人 我为不同的颜色代码创建了一个类 以便在discord py 中使用 可以将其导入到主文件中 class colors default 0 teal 0x1abc9c d
  • 为什么我只显示 1 个 JButton?

    我不明白为什么只有 登录现有帐户 是唯一显示的按钮 我想要的只是显示 2 个按钮 并且即使我将其可见性设置为 true 并将其移动 使其不与 登录到现有帐户 重叠 创建帐户 也不会显示 public class HotelBookingSy
  • 如何使用java正则表达式捕获带括号的组

    我有一些像这样的字符串 a b c d 并希望使用 java 正则表达式捕获带括号的组 我以为这个简单的正则表达式 Pattern p Pattern compile Pattern DOTALL 会做这项工作 但它没有 这有什么问题吗 不
  • 将 php curl 转换为 GAE urlfetch 以用于 iTunes InApp verifyReceipt

    有人可以帮忙将此 PHP Curl 转换为 UrlFetch 吗 这用于 Apple iTunes verifyReceipt if getiTunesProductionLevel app id sandbox sandbox overr
  • Android 设备上的输入失去焦点

    我在 Android 设备上遇到输入焦点问题 我为移动设备制作了一个画布外菜单 在此菜单中我有一个搜索输入 问题是 在android上 当我点击输入时 它会聚焦 然后键盘出现 然后输入失去焦点 键盘消失 我读到我可能必须更改清单元素中的 w
  • 基于循环内背景颜色变量的条件CSS

    我意识到这是一个与此类似的问题基于背景颜色变量的条件CSS https stackoverflow com questions 21600825 conditional css based on background color varia
  • 为什么 C# 编译器从这段代码创建 PrivateImplementationDetails ?

    我发现下面的代码 public static class MimeHelper public static string GetMimeType string strFileName string retval switch System