这是有效的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)
为什么第一个声明有效?
StringBuilder
工作怎么样?
它内部有什么作用?它使用不安全的代码吗?为什么它如此之快(与+
运营商相比)?
我发现常量字符串表达式的连接由编译器优化为一个字符串.
现在使用只在运行时知道的字符串串联,为什么编译器不会优化循环中的字符串连接和多于10个字符串的串联来StringBuilder.Append
代替?我的意思是,这是可能的,对吧?实例化a StringBuilder
并进行每个连接并将其转换为Append()
呼叫.
是否有任何理由为什么这应该或可以 不进行优化?我错过了什么?
string s = "";
for(int i=0;i<10;i++) {
s = s + i;
}
Run Code Online (Sandbox Code Playgroud)
我一直是这些选择来回答这个问题.
我有这个简单的代码,我只想知道这个代码将创建多少个字符串对象.
我有一个疑问,是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)
我按照下面的链接,但仍然不清楚.
请覆盖string str
和string str = null
案例.如果我们不初始化字符串以及何时将字符串赋值为null,会发生什么.所以在这两种情况下它将是一个对象或没有对象.
string str;
string str = null;
Run Code Online (Sandbox Code Playgroud)
稍后在代码中,如果我这样做.
str = …
Run Code Online (Sandbox Code Playgroud) 我有一个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) 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)
我没有任何记忆问题.我只是想确保我的代码干净简洁.
它更为人所知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
.有什么想法吗?
如果在这种情况下发生多个字符串的连接会发生什么?