stringbuilder.cs的Reference Source页面在ToString方法中有以下注释 :
if (chunk.m_ChunkLength > 0)
{
// Copy these into local variables so that they
// are stable even in the presence of ----s (hackers might do this)
char[] sourceArray = chunk.m_ChunkChars;
int chunkOffset = chunk.m_ChunkOffset;
int chunkLength = chunk.m_ChunkLength;
Run Code Online (Sandbox Code Playgroud)
这是什么意思?被----s一些恶意用户可能会插入一个字符串格式化?
我必须对一个带StringBuilder两个项目的方法进行单元测试,并填写StringBuilder两个项目之间的差异.
在我的第一次测试中,我给它两个相同的项目,所以我想测试它是否StringBuilder为空.
没有IsEmpty方法或财产.
如何轻松检查这个?
我是PowerShell的新手,但我熟悉.NET类.
我System.Text.StringBuilder在PowerShell脚本中使用.脚本就是这样
Function MyStringFunc([String]$line) {
$r = New-Object -TypeName "System.Collections.Generic.List``1[[System.String]]";
$sb = New-Object -TypeName "System.Text.StringBuilder";
foreach ($c in $line) {
$sb.Append($c);
$r.Add($sb.ToString());
}
return $r;
}
$line1 = "123";
$a = MyStringFunc $line1;
$a
Run Code Online (Sandbox Code Playgroud)
我预计结果是
1
12
123
Run Code Online (Sandbox Code Playgroud)
但结果是
Capacity MaxCapacity Length
-------- ----------- ------
16 2147483647 3
123
Run Code Online (Sandbox Code Playgroud)
我做错什么了吗?
什么是默认容量StringBuilder?
什么时候应该(或不应该)使用默认值?
这是一个简单的,我认为可以回答的问题.我确实试图在这里找到答案,但没有提出任何答案 - 如果有我错过的东西,请道歉.
无论如何,是否有相当于StringBuilder的字节数组?
我并不担心所有不同的重载Append()- 但我想看到Append(byte)和Append(byte[]).
周围有什么东西或者是你自己的时间吗?
在连接大量字符串时,我建议使用StringBuilder如下方法:
StringBuilder someString = new StringBuilder("abc");
someString.append("def");
someString.append("123");
someString.append("moreStuff");
Run Code Online (Sandbox Code Playgroud)
而不是
String someString = "abc";
someString = someString + "def";
someString = someString + "123";
someString = someString + "moreStuff";
Run Code Online (Sandbox Code Playgroud)
这将导致创建相当多的字符串,而不是一个.
现在,我需要做类似的事情,但我没有使用串联,而是使用replaceString 的方法:
String someString = SOME_LARGE_STRING_CONSTANT;
someString = someString.replace("$VARIABLE1", "abc");
someString = someString.replace("$VARIABLE2", "def");
someString = someString.replace("$VARIABLE3", "123");
someString = someString.replace("$VARIABLE4", "moreStuff");
Run Code Online (Sandbox Code Playgroud)
要使用StringBuilder完成同样的事情,我必须这样做,只为一个替换:
someString.replace(someString.indexOf("$VARIABLE1"), someString.indexOf("$VARIABLE1")+10, "abc");
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:"使用String.replace是否更好,并且创建了大量额外的字符串,或者仍然使用StringBuilder,并且有很多冗长的线条,例如上面那个?"
如何在C#中删除字符串中的空行?我在C#(winforms)中生成一些文本文件,由于某种原因,有一些空行.如何在生成字符串后删除它们(使用StringBuilder和TextWrite).
示例文本文件:
THIS IS A LINE
THIS IS ANOTHER LINE AFTER SOME EMPTY LINES!
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在浏览开源SignalR项目的源代码,我看到这个名为"不要在这个热代码路径中使用StringBuilder或foreach"的差异代码:
- public static string MakeCursor(IEnumerable<Cursor> cursors)
+ public static string MakeCursor(IList<Cursor> cursors)
{
- var sb = new StringBuilder();
- bool first = true;
- foreach (var c in cursors)
+ var result = "";
+ for (int i = 0; i < cursors.Count; i++)
{
- if (!first)
+ if (i > 0)
{
- sb.Append('|');
+ result += '|';
}
- sb.Append(Escape(c.Key));
- sb.Append(',');
- sb.Append(c.Id);
- first = false; …Run Code Online (Sandbox Code Playgroud) 我最近读过它StringWriter并StringReader用于写作和阅读StringBuilder.
好吧,当我使用StringBuilderObject时,它看起来是一个自给自足的类.
我们的阅读和写作的各种方式StringBuilder,使用
StringBuilder.Append(),Insert(),Replace(),Remove()等...
StringWriter和StringReader,它StringBuilder本身不能完成?Stream作为输入(因为任何其他编写器和读取器都将流作为Constructor参数进行操作)但是StringBuilder?我正在尝试使用stringbuilder来创建一个字符串体,用于文本(而不是HTML)电子邮件.但是有些行(我包含动态数据,不添加新行,但在某些行中,换行符按预期工作).
在使用stringbuilder类时是否存在基本的缺失或是否存在应该发生的更基本的过程?
在下面的代码中:
sbUser.AppendLine("Please find below confirmation of your registration details. If any of these details are incorrect, please email someone@somewhere.com");
sbUser.AppendLine();
sbUser.AppendLine("Selected event : " + ContentPage.FetchByID(int.Parse(ddlEvent.SelectedValue)).PageTitle);
sbUser.AppendLine("Date of event : " + thisEvent.EventStartDate.ToString("dd MMM yyyy"));
sbUser.AppendLine("==============================================================");
sbUser.AppendLine();
Run Code Online (Sandbox Code Playgroud)
(ContentPage和thisEvent是使用Subsonic(v2)构建的自定义类.PageTitle是字符串的输出类型)
将此作为输出:
Please find below confirmation of your registration details. If any of these details are incorrect, please email someone@somewhere.com
Selected event : My Event Date of event : 16 Sept 2012 ==============================================================
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,代码中第3行之后的所有内容都会使所有内容都转到一行.
但是,我使用的代码更进一步:
sbRR.AppendLine("First name : " + txtFirstname.Text.Trim()); …Run Code Online (Sandbox Code Playgroud) stringbuilder ×10
c# ×7
.net ×6
string ×2
bytearray ×1
c#-3.0 ×1
capacity ×1
clr ×1
foreach ×1
java ×1
newline ×1
optimization ×1
powershell ×1
regex ×1
replace ×1
signalr ×1
stringreader ×1