- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
短版:
C# 代码
typeof(string).GetField("Empty").SetValue(null, "Hello world!");
Console.WriteLine(string.Empty);
"Hello world!"
在 .NET 4.0 及更早版本下,但提供
""
在 .NET 4.5 和 .NET 4.5.1 下。
string.Empty
字段(也称为
[mscorlib]System.String::Empty
)不是
const
(又名
literal
),参见“
Why isn't String.Empty a constant?”。这意味着,例如,在 C# 中我们不能使用
string.Empty
在以下情况下:
switch
声明形式 case string.Empty:
void M(string x = string.Empty) { }
[SomeAttribute(string.Empty)]
string.Empty
有影响或
""
,见“
In C#, should I use string.Empty or String.Empty or "" to intitialize a string?”。
Empty
自娱自乐。通过反射到其他一些字符串实例,看看 BCL 的多少部分因此开始表现异常。这是相当多的。和
Empty
的变化引用似乎在应用程序的整个生命周期中都存在。现在,前几天我试图重复那个小特技,但后来使用了 .NET 4.5 机器,我再也做不到了。
PowerShell
仍然使用旧版本的 .NET(编辑:仅适用于 Windows 7 或更旧版本,其中 PowerShell 没有更新到 PowerShell 2.0 以上),所以尝试复制-将
[String].GetField("Empty").SetValue($null, "Hello world!")
粘贴到 PowerShell 中以查看更改此引用的一些效果。)
System.String
有一个静态构造函数
.cctor
其中领域
Empty
已设置(在 C# 源代码中,当然,这可能只是一个字段初始值设定项),而在 4.5 中不存在静态构造函数。在这两个版本中,字段本身看起来是一样的:
.field public static initonly string Empty
String::Empty
外没有其他字段似乎受到了影响。作为一个例子,我试验了
System.Diagnostics.Debugger::DefaultCategory
.这种情况看起来很相似:一个包含
static readonly
的密封类(
static initonly
)
string
类型的字段.但是在这种情况下,通过反射更改值(引用)可以正常工作。
Empty
怎么可能?当我设置字段时,似乎没有改变(在 4.5 中)?我已经验证 C# 编译器不会在读取时“作弊”,它输出 IL 如下:
ldsfld string [mscorlib]System.String::Empty
readonly
(在 IL 中又名
initonly
))实际上按预期工作。它是
阅读 异常的操作。如果你用反射阅读,如
typeof(string).GetField("Empty").GetValue(null)
,一切正常(即看到值的变化)。请参阅下面的评论。
最佳答案
不同之处在于新版本 .NET 的 JIT,它显然优化了对 String.Empty
的引用。通过内联对特定 String
的引用实例而不是加载存储在 Empty
中的值 field 。这在 的定义下是合理的。仅初始化约束 在 ECMA-335 Partition I §8.6.1.2 中,可以解释为 String.Empty
的值String
后字段不会改变类被初始化。
关于c# - 更改了 .NET 4.5 中 string.Empty(或 System.String::Empty)的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16618302/
我想创建一个基于 jQuery 的非常简单的 html 编辑器(不是所见即所得)。 我的问题是如何制作 textarea或 div可能 在上面写一些文字 然后样式即标签(例如 some stuff 将
根据文档 isset 条款“测试此项目中是否已设置给定属性”。我不明白设置属性时 isset 返回 true 还是 false 在下面的代码片段中,当 env.JAVA_HOME 未设置时,java.
我正在尝试取消映射 o这是执行 :only 的默认命令( :help :only ),所以我尝试的第一件事是: nmap o 这种作品,除非我按 ,等待超过timeoutlen ms 然后按 o
我有以下型号: class MetaData(models.Model): created_at = models.DateTimeField(auto_now_add=True, auto_
下面列出了两行代码。两者对日期和时间的期望相同,但只有一个有效。我正在使用 R 3.1。 以下不起作用: DateTime2=strftime("08/13/2010 05:26:24.350", f
我有一个关于 C 代码的问题。 #include void foo(void){ int a; printf("%d\n",a); } void bar(void){
如果文件大小 > 8k,为什么读取的最后一个字节 = 0? private static final int GAP_SIZE = 8 * 1024; public static void main(
我有一个命令 Get-Testdata从不同来源检索测试数据并将这些数据存储到 PSObject以不同的值作为属性。然后将对象总数存储为数组,以便于操作、排序、计算等。 我的问题是我希望能够将这些数据
我正在使用 epoll 将大消息写入使用 HTTP 协议(protocol)的服务器。 fds 都设置为非阻塞,我正在使用边缘触发事件。我知道对于 EPOLLIN,我需要循环读取 fd,直到返回 EA
这对我来说听起来很奇怪: $test_1 = 'string'; $test_2 = '0'; var_dump(intval($test_1)); // Output: int 0 var_dump
这个问题在这里已经有了答案: Java: Integer equals vs. == (7 个回答) 7年前关闭。 请您解释以下行为。 public class EqAndRef { publ
Drupal 的行为到底是什么? 它为模块开发人员提供什么类型的服务层? 它映射到 jQuery.ready 的关系类型是什么? 最佳答案 长版:Drupal.behaviors 不仅仅是 jQuer
以下代码: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ for (int i=0
人们可以将项目添加到数据库中。我让他们选择在此时添加它,或手动选择日期。 因此我得到了这个 HTML 结构。 (请注意,我将日期和时间选择器妥协为只有一行文本) Selec
创建了一个数据框: simpleDF is.na(simpleDF$vals) [1] TRUE TRUE FALSE > is.nan(simpleDF$vals) [1] FALSE TRU
我有一个大的 docker 镜像 A,我创建了一个新的 Dockerfile FROM A RUN rm /big-folder 我尝试使用以下方法构建图像: docker build --squas
我想知道以下情况下 JVM 的行为是什么: JVM 最小堆大小 = 500MB JVM 最大堆大小 = 2GB 操作系统有 1GB 内存 JVM启动后,程序运行一段时间后,使用内存超过1GB。我想知道
我们正在使用 spikeearrest 策略,但我们不了解其工作原理。峰值逮捕配置如下: 5pm 阅读文档,我们了解到,如果我们在一分钟内调用此流超过 5 次,则该策略将在第 5 次之后
我正在使用 cURL 发送 POST 请求: curl http://tarvos.local:8080/partial_Users/2 -d '{currentPage : 1, firstID :
我的表中有 6442670 条记录,我正在使用以下命令获取它们jdbctemplate 使用行号一次 1000000 个。以下是查询 select * from (select rowNum rn
我是一名优秀的程序员,十分优秀!