Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否需要将类的成员字符串变量设置为"&引用;?_C#_String - Fatal编程技术网

C# 是否需要将类的成员字符串变量设置为"&引用;?

C# 是否需要将类的成员字符串变量设置为"&引用;?,c#,string,C#,String,是否需要将类的字符串成员变量设置为“”?除非您这样做,否则它是否为空?是的,字符串的默认值为空。字符串的默认值为空。字符串为空的原因是字符串是引用类型,所有引用类型的默认值都为空(即无引用) 最好的引用是(请记住,默认情况下所有引用类型都设置为null),但下面的一些示例给出了一个不错的想法: string a = default(string); // null String b = default(String); // null int c = default(int); // 0 int

是否需要将类的字符串成员变量设置为“”?除非您这样做,否则它是否为空?

是的,字符串的默认值为空。

字符串的默认值为空。

字符串为空的原因是字符串是引用类型,所有引用类型的默认值都为空(即无引用)

最好的引用是(请记住,默认情况下所有引用类型都设置为null),但下面的一些示例给出了一个不错的想法:

string a = default(string); // null
String b = default(String); // null
int c = default(int); // 0
int? d = default(int?); // null
Object e = default(object); // null
double f = default(double); // 0.0

// an instance of someStruct with fields set to default(theirType)
someStruct g = default(someStruct); 
字符串似乎是一种值类型,因为它看起来很原始。此外,它是不可变的,这意味着您永远不能修改字符串,而只是将字符串符号设置为指向新字符串“值”(它们本身就是引用),给人一种字符串是值类型的印象

例如:

 string a = "boo"; 
 /* Mem contains reference to "boo" and symbol 'a' => reference("boo") */

 a = "gah";
 /* Mem contains references to "boo" and "gah". symbol 'a' -> reference("gah") */
有关字符串的更多信息,请参见


别忘了

这已经被问过很多次了。前面的回答者直接跳到了你的第二个问题,没有回答你的第一个问题,我觉得这更重要,因为一个简单的谷歌搜索会告诉你默认值是多少

是否需要将类的字符串成员变量设置为“”

这取决于你所说的“需要”是什么意思。如果你对可读性感兴趣,那么是的,这很可能是需要的。这将是一个个人决定,需要您的团队达成共识。我个人认为,如果在适当的位置给变量一个默认值,那么事情就更容易理解。如果你在正确的地方进行编译,编译器会对它进行优化,所以它实际上是可读性的问题

可以找到一些非常好的见解。

  • 是否需要将类的字符串成员变量设置为“”
如果您的类方法知道字符串成员变量的默认值是
null
,并对其进行相应处理(即,在使用其值之前检查它是否为null),则不会这样做

否则,将其初始化为非空值可能是一个好主意。如果可以假设变量始终具有非空值,则这可以简化方法

  • 除非你这样做,否则它会是空的吗

是的,在构建类对象时,没有显式初始值设定项值的引用类型(例如,
string
)的成员变量默认初始化为
null

此外,如果您的应用程序不区分null和empty“”,则在测试该值时,请使用
string.IsNullOrEmpty()
。如果您也将空白视为空,则使用新的
字符串。IsNullOrWhiteSpace()
。null、“”和“”将为true。任何非空白字符都将为false

string s = GetSomeString();

if(String.IsNullOrEmpty(s)) {
//do whatever here
}

还有,我需要一些方法来打破杰罗德和jean27之间的关系。接受杰罗德的回答,他先回答…@Hinek:你怎么知道哪一个是第一个?他们都说两天(写这篇文章的时候),在问题和答案之间有一条细线“3个答案”——“最老的”——“最新的”——“投票”。如果你点击“最旧的”,答案会排在最旧的最上面(例外是被接受的答案,它总是在最上面)。如果你“需要”将字符串设置为
,那么你最好按照StyleCop的建议,改为使用
string.Empty
。我不主张介于“”和null之间,只是介于nothing和nothing之间。如果一个变量从未初始化过,那么它需要很短但固有的中断停顿来思考当一个变量未设置时默认值是什么。在我看来,消除这些中断(未初始化的变量只是一个例子,还有一个小例子)是可读性的本质之一。