相关疑难解决方法(0)

为什么连接空字符串有效但不调用"null.ToString()"?

这是有效的C#代码

var bob = "abc" + null + null + null + "123";  // abc123
Run Code Online (Sandbox Code Playgroud)

这不是有效的C#代码

var wtf = null.ToString(); // compiler error
Run Code Online (Sandbox Code Playgroud)

为什么第一个声明有效?

.net c# string null

121
推荐指数
6
解决办法
9654
查看次数

StringBuilder如何在C#内部工作?

StringBuilder工作怎么样?

内部有什么作用?它使用不安全的代码吗?为什么它如此之快(与+运营商相比)?

.net c# string stringbuilder

45
推荐指数
2
解决办法
1万
查看次数

为什么String.Concat没有针对StringBuilder.Append进行优化?

我发现常量字符串表达式的连接由编译器优化为一个字符串.

现在使用只在运行时知道的字符串串联,为什么编译器不会优化循环中的字符串连接和多于10个字符串的串联来StringBuilder.Append代替?我的意思是,这是可能的,对吧?实例化a StringBuilder并进行每个连接并将其转换为Append()呼叫.

是否有任何理由为什么这应该可以 进行优化?我错过了什么?

.net c# string clr optimization

21
推荐指数
4
解决办法
2339
查看次数

下面的代码创建了多少个字符串对象?

string s = "";
for(int i=0;i<10;i++) {
s = s + i;
}
Run Code Online (Sandbox Code Playgroud)

我一直是这些选择来回答这个问题.

  1. 1
  2. 11
  3. 10
  4. 2

我有这个简单的代码,我只想知道这个代码将创建多少个字符串对象.

我有一个疑问,是string s = "";没有创造任何对象.我不这么认为,请让我说清楚.

如果我用+运算符追加字符串,它会创建新的字符串,所以我认为它将是在for循环的每次迭代中创建的新对象.

所以我认为会创建11个对象.让我知道如果我不对.

String result = "1" + "2" + "3" + "4";  //Compiler will optimise this code to the below line.
String result = "1234"; //So in this case only 1 object will be created??
Run Code Online (Sandbox Code Playgroud)

我按照下面的链接,但仍然不清楚.

链接1

请覆盖string strstring str = null案例.如果我们不初始化字符串以及何时将字符串赋值为null,会发生什么.所以在这两种情况下它将是一个对象或没有对象.

string str;

string str = null;
Run Code Online (Sandbox Code Playgroud)

稍后在代码中,如果我这样做.

str = …
Run Code Online (Sandbox Code Playgroud)

c# string

6
推荐指数
1
解决办法
488
查看次数

StringBuilder在C#中的表现?

我有一个StringBuilder对象,我添加一些字符串,如下所示:

我想知道哪一个更好的方法,首先是这个:

StringBuilder sb = new StringBuilder();
sb.Append("Hello" + "How" + "are" + "you");
Run Code Online (Sandbox Code Playgroud)

第二个是:

StringBuilder sb = new StringBuilder();
sb.Append("Hello").Append("How").Append("are").Append("you");
Run Code Online (Sandbox Code Playgroud)

c#

5
推荐指数
2
解决办法
2618
查看次数

C#foreach内存缓存和字符串内存优化

foreach (string sn in MACOrSerial.Split(','))
{
    MACOrSerial = sn.Trim();   
}
Run Code Online (Sandbox Code Playgroud)

MACORSerial包含以逗号分隔的一串文本(EX.AA123241,BB123431,CC1231243).我抓住一个子串并将其放入相同的MACORSerial中.

这不会给我带来任何问题,因为foreach仍将使用内存中的原始 MACOrSerial.

虽然我认为这是最节省内存的方法,但它是否正确或者我应该使用新名称制作另一个字符串,例如

MacORSerialSubString = sn.Trim()?
Run Code Online (Sandbox Code Playgroud)

我没有任何记忆问题.我只是想确保我的代码干净简洁.

c#

1
推荐指数
1
解决办法
849
查看次数

字符串连接如何在C#中进行,用于var q ="A"+"B"+"C"

它更为人所知strings are immutable=>意思,那the contents of the object cannot be changed after it is created.

所以,面试问题是:

在此声明中创建了多少个对象?

string q = "A" + "B" + "C";

我回答two是因为"A"+"B"创建了一个对象并且与"C"连接创建了另一个对象.

但是,她说its wrong.有什么想法吗?

如果在这种情况下发生多个字符串的连接会发生什么?

.net c# string immutability visual-studio-2010

1
推荐指数
1
解决办法
186
查看次数