防止更改 String.Empty 的值

2024-01-07

部分是出于好奇的破坏事物的角度,部分是出于防范潜在问题的目的。想象一下通过调用以下内容(或类似的内容,但是string.Empty是一个很好的例子):

typeof(String).GetField("Empty", 
    BindingFlags.Public | 
    BindingFlags.NonPublic | 
    BindingFlags.Static | 
    BindingFlags.GetField
).SetValue(null, "foo" );

当某个地方有代码这样做时,这会导致问题x = myClass.bar ?? string.Empty.

有没有什么方法(类似于不同的应用程序域或类似的)来防止(或检测)某人更改值,例如String.Empty或者也许是SqlDateTime.MinValue(或 .NET 中其他类似的只读字段)?


你可以定义你自己的const领域在your像这样组装:

internal const string Empty = "";

然后执行检查String.Empty http://msdn.microsoft.com/en-us/library/system.string.empty.aspx,但这几乎是徒劳的。

您必须在访问的所有地方执行检查String.Empty并有效地替换它(因为您会在比较时进行检查,所以实际使用没有意义String.Empty不再超过你的版本)。

既然是const,该值无法更改,这很好,但同时,如果String.Empty does一旦发生变化(无论可能性如何),您都必须更改您的值,然后重新编译一切引用该字段。

当然,你可以制作你的版本readonly,但是这样你就很容易通过反射改变值,然后你又回到了开始的地方。

除此之外,如果String.Empty改变了,不仅会影响与该领域的比较,而且我想巨大的BCL 中的许多方法无法正常工作;通过Reflector查看,它似乎在mscorlib(.NET 4.0)中被引用了几百次alone:

这么说来,你可以尝试并保证该值没有改变,但这并不实用(这将是一场永恒的猫捉老鼠的游戏),从你的程序的角度来看,如果String.Empty一旦被改变,世界就会终结,程序几乎一旦被改变就会很快可怕地死去。

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

防止更改 String.Empty 的值 的相关文章

随机推荐

  • 如何从 Azure 数据工厂运行 PowerShell

    I have PowerShell该脚本将复杂的 CSV 文件分割为每 1000 条记录的较小的 CSV 文件 这是代码 i 0 Get Content C Users dell Desktop Powershell Input bigsi
  • SignTool 错误:访问被拒绝

    我正在尝试使用 pfx 文件签署外部 dllSignTool在cmd exe中使用以下代码 SignTool 签名 f MyCert pfx p MyPassword MyControl dll 但是 我不断收到以下错误消息 Done Ad
  • 如何过滤列表

    我正在编写一个简单的函数 从列表中取出任何奇数并返回仅包含偶数的列表 def purify numbers for i in numbers if i 2 0 numbers remove i return numbers print pu
  • 无法从其他应用程序读取 SharedPreferences

    EDITED 我有一个应用程序可以像这样写入 SharedPreferences Context otherAppsContext null try otherAppsContext createPackageContext AfroKey
  • 如何获取 jPlayer 中歌曲当前播放的时间? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我使用 jPlayer 控件来播放音
  • 在notifyAppWidgetViewDataChanged之后没有调用RemoteViewService中的onDataSetChanged()

    在我的 AppWidgetProvider 类中 我有以下代码onUpdate method Update each of the widgets with the remote adapter for int appWidgetId ap
  • 完美转发、可变参数模板、initializer_list - 一起

    gcc 4 8 1 和 clang 3 3 c 11 功能完整 我需要在某些构造 make shared c 14 make unique 等元素的函数中转发参数 但我对类型推导 转发初始值设定项列表 数组有问题 我需要的工作示例foo f
  • 了解托管 bean/支持 bean [重复]

    这个问题在这里已经有答案了 我正在学习 Java EE 6 我正在尝试掌握它的整体形象 我正在阅读有关 JSF 以及如何添加组件的内容 我正在将组件中的值设置 读取到具有 ManagedBean 注释的 bean 我在正确理解它时遇到一些困
  • 单个变量的线程安全

    我了解线程安全的概念 我正在寻找在尝试保护单个变量时简化线程安全的建议 假设我有一个变量 double aPass 我想保护这个变量 所以我创建了一个互斥体 pthread mutex t aPass lock 现在我可以想到两种好方法 但
  • 导入打字稿时如何在路径中使用变量

    是否可以将变量 或常量 放入路径中 而不是将整个路径写为字符串文字 看起来 Angular 除了字符串文字之外不接受任何内容 import aClass require simpleClass import aComponent from
  • 将 pandas 数据框转换为 pandas 系列

    我需要一些有关数据类型问题的帮助 我正在尝试转换 pandas 数据框 如下所示 timestamp number 2018 01 01 1 2018 02 01 0 2018 03 01 5 2018 04 01 0 2018 05 01
  • 从 NSURLConnection 的响应头中读取数据

    如何从服务器响应中发送的标头中读取数据 我正在使用 NSURLConnection 发送请求 如果 URL 是 HTTP URL 则NSURLResponse您在连接的委托中收到的 connection didReceiveResponse
  • xampp mysql 和 phpmyadmin 不起作用

    昨天我使用 xampp 并使用 apache 和 mysql 服务 今天想启动mysql服务 没成功 我尝试在论坛上搜索解决方案 但找不到任何内容 所以我问你 在 mysql 停止工作后 我在日志文件中找到此消息 2015 10 29 12
  • ASP.NET MVC 将数据从视图传递到控制器

    我有一个带有网格的视图 其中包含添加到工作站的项目 用户可以从下拉列表中选择一个项目 然后单击一个操作链接 该链接调用控制器将该项目添加到工作站 我可以通过读取控制器的 Post 操作中的 FormCollection 对象来使其工作 p
  • 如何在 AWS 负载均衡器响应中禁用 Apache HTTP 标头信息?

    我在 Apache 服务器上使用 AWS Elastic Beanstalk 部署了一个 node js 环境 我对环境运行了 PCI 扫描 但出现了 2 次失败 Apache ServerTokens 信息披露 Web服务器HTTP头信息
  • 从逗号分隔字段中选择

    说我有一个subscribers表 每个用户都有一行 如下所示 id name subscribers 1 user1 user2 user3 user4 2 user2 user4 user5 user3 3 user3 user1 us
  • Apache Spark:核心数量与执行器数量

    我试图了解在 YARN 上运行 Spark 作业时核心数量和执行器数量的关系 测试环境如下 数据节点数量 3 Data node machine spec CPU Core i7 4790 核心数 4 线程数 8 内存 32GB 8GB x
  • Firebase 功能 HTTPS 403 禁止

    我使用 Node 和 Express 构建了 Firebase HTTP 事件函数 该函数正在工作 但是当我在客户端调用该函数时 我得到403 Forbidden 第一次调用该功能时 我被要求使用 Google 帐户登录 我使用与 Fire
  • Python xml - 处理未封闭的令牌

    我正在读取数百个 XML 文件并使用 xml etree ElementTree 解析它们 快速背景 这些 XML 文件在某一时刻是完全有效的 但不知何故 在历史上处理它们时 我复制 粘贴它们的过程可能已损坏它们 事实证明 这是一个冲洗问题
  • 防止更改 String.Empty 的值

    部分是出于好奇的破坏事物的角度 部分是出于防范潜在问题的目的 想象一下通过调用以下内容 或类似的内容 但是string Empty是一个很好的例子 typeof String GetField Empty BindingFlags Publ