相关疑难解决方法(0)

C#的隐藏功能?

在我从这个问题中学到以下内容后,我想到了这一点:

where T : struct
Run Code Online (Sandbox Code Playgroud)

我们C#开发人员都知道C#的基础知识.我的意思是声明,条件,循环,运算符等.

我们中的一些人甚至掌握了Generics,匿名类型,lambdas,LINQ等......

但是C#粉丝,瘾君子,专家几乎都不知道C#最隐藏的功能或技巧是什么?

以下是到目前为止显示的功能:


关键词

属性

c# hidden-features

1475
推荐指数
230
解决办法
68万
查看次数

String.Empty和""(空字符串)有什么区别?

在.NET中,String.Empty和之间的区别是什么"",它们是可互换的,还是存在一些基本的参考或本地化问题,这些问题String.Empty将确保不是问题?

.net string double-quotes

278
推荐指数
11
解决办法
8万
查看次数

为什么String.Empty不是常量?

在.Net中为什么String.Empty只读而不是常量?我只是想知道是否有人知道该决定背后的原因是什么.

.net string constants readonly

182
推荐指数
3
解决办法
2万
查看次数

默认字符串初始化:NULL还是Empty?

我总是将我的字符串初始化为NULL,认为NULL表示没有值,""或String.Empty是一个有效值.我最近看到了更多代码示例,其中String.Empty被视为默认值或不表示任何值.这让我感到很奇怪,在c#中新添加的可空类型似乎我们通过不使用NULL来表示"无值"来向后调整字符串.

您使用什么作为默认初始化程序?为什么?

编辑:根据答案,我进一步思考

  1. 避免错误处理如果值不应为null,为什么它NULL首先设置为?也许最好在发生错误的位置识别错误,而不是在代码库的其余部分覆盖错误?

  2. 避免空检查如果您厌倦了在代码中进行空检查,那么抽象空检查是不是更好?也许包装(或扩展!)字符串方法以使它们NULL安全吗?如果你经常使用String.Empty并且null正好进入你的系统会发生什么,你是否开始添加NULL检查?

我忍不住回到懒惰的意见.如果你使用''而不是null在他的数据库中使用',那么任何DBA都会狠狠地打你九种方式.我认为同样的原则适用于编程,并且应该有人打击那些使用String.Empty而不是NULL代表没有价值的人.

相关问题

c#

127
推荐指数
6
解决办法
14万
查看次数

93
推荐指数
5
解决办法
5万
查看次数

81
推荐指数
5
解决办法
21万
查看次数

string.Empty vs null.你使用哪一个?

最近一位工作的同事告诉我string.Empty在设置字符串变量时不要使用,但是null因为它污染了堆栈?

他说不要这样做

string myString=string.Empty; 但是 string mystring=null;

真的有关系吗?我知道字符串是一个对象所以它是有道理的.

我知道这是一个愚蠢的问题,但你的观点是什么?

.net c# string null

79
推荐指数
3
解决办法
6万
查看次数

同时声明并分配多个字符串变量

我正在声明一些空的字符串,因此以后不会抛出错误.

我读过这是正确的方法:

string Camnr = Klantnr = Ordernr = Bonnr = Volgnr = Omschrijving = Startdatum = Bonprioriteit = Matsoort = Dikte = Draaibaarheid = Draaiomschrijving = Orderleverdatum = Regeltaakkode = Gebruiksvoorkeur = Regelcamprog = Regeltijd = Orderrelease = "";
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我收到这个错误:Klantnr does not exist in the current context.

我做错了什么?

c# string

63
推荐指数
7
解决办法
10万
查看次数

在C#中检查空字符串的最可行方法

在考虑代码性能时,在C#中检查空字符串的最佳方法是什么(我不是要求初始化!)(参见下面的代码)

string a;

// some code here.......


if(a == string.Empty)
Run Code Online (Sandbox Code Playgroud)

要么

if(string.IsNullOrEmpty(a))
Run Code Online (Sandbox Code Playgroud)

要么

if(a == "")
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.:)

c# string comparison

54
推荐指数
3
解决办法
9万
查看次数

在.NET 4.5中更改了string.Empty(或System.String :: Empty)的行为

精简版:

C#代码

typeof(string).GetField("Empty").SetValue(null, "Hello world!");
Console.WriteLine(string.Empty);
Run Code Online (Sandbox Code Playgroud)

在编译和运行时,"Hello world!"在.NET 4.0及更早版本下提供输出,但""在.NET 4.5和.NET 4.5.1下提供.

如何像这样忽略对字段的写入,或者,谁重置该字段?

更长的版本:

我从来没有真正理解为什么string.Empty字段(也称为[mscorlib]System.String::Empty)不是const(aka.literal),请参阅" 为什么String.Empty不是常量? ".这意味着,例如,在C#中我们不能string.Empty在以下情况下使用:

  • switch表格中的陈述case string.Empty:
  • 作为可选参数的默认值,如 void M(string x = string.Empty) { }
  • 在应用属性时,例如 [SomeAttribute(string.Empty)]
  • 需要编译时常量的其他情况

这对于众所周知的"宗教战争"是否影响是否使用string.Empty"",请参阅" 在C#中,我应该使用string.Empty或String.Empty还是"来初始化字符串? ".

几年前,我Empty通过反射设置其他字符串实例来自娱自乐,看看BCL有多少部分由于它而开始表现奇怪.这是很多.并且Empty参考的变化似乎在应用程序的整个生命周期中持续存在.现在,有一天我试图重复那个小噱头,但后来使用的是.NET 4.5机器,我再也无法做到了.

(注意!如果您的计算机上安装了.NET 4.5,可能PowerShell仍然使用较旧版本的.NET,请尝试复制粘贴[String].GetField("Empty").SetValue($null, "Hello world!")到PowerShell中以查看更改此引用的一些效果.)

当我试图寻找原因时,我偶然发现了一个有趣的主题:" .NET 4.5 beta版本中FatalExecutionEngineError的原因是什么? ".在该问题的公认答案中,是否注意到通过版本4.0,System.String有一个静态构造函数.cctor,其中Empty设置了字段(在C#源中,当然可能只是一个字段初始化程序),而在4.5中没有静态构造函数存在.在这两个版本中,字段本身看起来都是一样的:

.field public …
Run Code Online (Sandbox Code Playgroud)

.net c# string readonly .net-4.5

40
推荐指数
2
解决办法
1506
查看次数