`
webcode
  • 浏览: 5944802 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

string.Empty 和 "" 并不总是可以互换的

 
阅读更多
在 C# 中,大多数情况下 "" 和 string.Empty 可以互换使用。比如:

strings="";
strings2=string.Empty;

if(s==string.Empty){
//
}

但是我发现有一种情况下只能是用常数形式: "", 而不能使用 string.Empty 这个静态变量。就是在标签(Attribute) 的构造器里面:

这个代码是正确的:
[Default("")]
publicstringName{
get{returnname;}
set{name=value;}
}

这个是错误的,无法通过编译:
[Default(string.Empty)]
publicstringName{
get{returnname;}
set{name=value;}
}


错误信息是:
error CS0182: 属性参数必须是常数表达式、typeof 表达式或数组创建表达式

其他地方我并未发现类似的例子。

顺便提一下,判定为空字符串的几种写法,按照性能从高到低的顺序是:

s.Length == 0 优于 s == string.Empty 优于 s == ""
//************************************************************************

之所以不能使用 [Default(String.Empty)] 而必须使用 [Default("")],那是由两个方面的因素决定的:

1. 特性(Attribute)是在编译器实例化并用自身的数据来扩展目标对象的元数据,这就要求你传递给它的参数必须在编译器是“可知”的;

2. String.Empty 是一个静态只读字段(static readonly field),这种字段和常量字段很象,不同的是只读字段(不管是否静态的)都可以把自身的初始化推迟到运行时。

鉴于以上两个方面存在矛盾的可能性,编译器只好禁止我们使用 [Default(String.Empty)] ,以防意外。

分享到:
评论

相关推荐

    C#中string.Empty和null的区别详解

    网上有一篇被转载了几十遍的文章是这样说的string.Empty 不分配存储空间,”” 分配一个长度为空的存储空间,我认为这句话是错误并且含糊不清的。  1、实际上Empty是string类中的一个静态的只读字段,他的定义是这样...

    asp.net String.Empty NULL 不同之处

    本文就它们彼此的不同之处做一粗略说明。... string.Empty不分配存储空间 “”分配一个长度为空的存储空间 所以一般用string.Empty 为了以后跨平台,还是用string.empty 在 C# 中,大多数情况下

    C语言头文件 STRING.H

    C语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING....

    305-字符串函数string.h应用举例(51单片机C语言实例Proteus仿真和代码)

    305-字符串函数string.h应用举例(51单片机C语言实例Proteus仿真和代码)305-字符串函数string.h应用举例(51单片机C语言实例Proteus仿真和代码)305-字符串函数string.h应用举例(51单片机C语言实例Proteus仿真和代码)...

    asp.net中DBNull.Value,null,String.Empty区别浅析

    String.Empty是一个静态的公共变量,表示某String变量不包含任何字符(等同于””)。不过从性能上说,用String.Empty比声明用一个””好一些——显然地,前者是String类的静态变量,无论如何使用只产生一个实例,后...

    Excel和String.xml 互相转换工具

    使用excel表格统一管理字符串,实现String.xml 和Excel 相互转换

    粤语语音包,调用时候选择voice名称为ScanSoft Sin-Ji_Full_22kHz即可调用

    i < spVoice.GetVoices(string.Empty, string.Empty).Count; i++) { if (spVoice.GetVoices(string.Empty, string.Empty).Item(i).GetDescription(0) == "ScanSoft Sin-Ji_Full_22kHz") { spVoice.Voice = ...

    String.h函数详解

    String.h函数详解 1、strcpy  函数名: stpcpy  功 能: 拷贝一个字符串到另一个  用 法: char *stpcpy(char *destin, char *source);  程序例:  #include <stdio.h>  #include <string.h>  int main...

    C语言库函数源码(string.h)

    里面包含大多数的C语言库函数源码,其中string.h中的源码最为多,希望能对大家有所帮助。

    基于Keil实现字符串函数string.h的简单应用

    基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用...

    c# string.Format 的用法

    使用c#的string.format 的一些常用的参数

    ekho包含多个语音报,调用看描述

    if (spVoice.GetVoices(string.Empty, string.Empty).Item(i).GetDescription(0) == "ScanSoft Sin-Ji_Full_22kHz") { spVoice.Voice = spVoice.GetVoices(string.Empty, string.Empty).Item(i); } } ...

    JAVA String.format方法使用介绍

    argues),可以将各类数据格式化为字符串并输出。其中format参数指定了输出的格式,是最复杂也是最难掌握的一点,而argues则是一系列等 待被格式化的对象。该函数对c语言中printf函数的用法进行了一定的模仿,因此有...

    最新单片机仿真 字符串函数string.h应用举例

    最新单片机仿真 字符串函数string.h应用举例最新单片机仿真 字符串函数string.h应用举例最新单片机仿真 字符串函数string.h应用举例最新单片机仿真 字符串函数string.h应用举例最新单片机仿真 字符串函数string.h...

    String.xml转Excel翻译工具

    ( String.xml转Excel翻译工具.zip....................................................................

    android String.xml Excel 相互转换工具

    android 国际化 String.xml Excel 相互转换工具

    String.h文件

    标准库 - <string.h> 简介 string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。

    String.xml Excel 相互转换工具

    android 字符串国际化工具 String.xml Excel 相互转换工具

    js写的string.format函数

    js 写的string format函数,功能模仿C#中的string.Format方法,已实现(整数 :D、小数:F、货币数字:C、科学计数:E 等4种)数字格式化。参数可以传递数组,也可以传多个参数。

Global site tag (gtag.js) - Google Analytics