我打算使用逐字字符串,但我错误地键入$而不是@.
但编译器没有给我任何错误和编译成功.
我想知道它是什么以及它做了什么.我搜索它但我找不到任何东西.
然而,它不像一个逐字字符串,因为我不能写:
string str = $"text\";
Run Code Online (Sandbox Code Playgroud)
有没有人知道$C#之前的字符串代表什么.
string str = $"text";
Run Code Online (Sandbox Code Playgroud)
我正在使用Visual Studio 2015 CTP.
为什么有人会使用String.FormatC#和VB .NET而不是串联运算符(&在VB和+C#中)?
主要区别是什么?为什么每个人都如此感兴趣String.Format?我很好奇.
假设我在C#中有一个stringbuilder来执行此操作:
StringBuilder sb = new StringBuilder();
string cat = "cat";
sb.Append("the ").Append(cat).(" in the hat");
string s = sb.ToString();
Run Code Online (Sandbox Code Playgroud)
那将是有效的或更高效的:
string cat = "cat";
string s = String.Format("The {0} in the hat", cat);
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?
编辑
在一些有趣的答案之后,我意识到我可能应该对我的要求更加清楚.我没有那么多要求连接字符串哪个更快,但是将一个字符串注入另一个字符串更快.
在上面两种情况下,我想将一个或多个字符串注入预定义模板字符串的中间.
对困惑感到抱歉
简短的问题
我有一个运行180,000次的循环.在每次迭代结束时,它应该将结果附加到TextBox,TextBox是实时更新的.
使用MyTextBox.Text += someValue导致应用程序占用大量内存,并且在几千条记录之后它耗尽了可用内存.
是否有更有效的方式将文本附加到TextBox.Text180,000次?
编辑我真的不关心这个特定情况的结果,但我想知道为什么这似乎是一个记忆猪,并且如果有一种更有效的方法将文本附加到TextBox.
长(原始)问题
我有一个小应用程序,它读取CSV文件中的ID号列表,并为每个应用程序生成PDF报告.生成每个pdf文件后,ResultsTextBox.Text将附加到已处理的报告的ID号以及已成功处理的报告的ID号.该进程在后台线程上运行,因此ResultsTextBox会在项处理时实时更新
我目前正在针对180,000个ID号运行该应用程序,但是应用程序占用的内存随着时间的推移呈指数级增长.它从大约90K开始,但是大约3000条记录占用大约250MB,而4000条记录占用大约500 MB的内存.
如果我注释掉结果文本框的更新,内存保持相对静止大约90K,所以我可以假设写作ResultsText.Text += someValue是导致它吃内存的原因.
我的问题是,这是为什么?将数据附加到不吃内存的TextBox.Text的更好方法是什么?
我的代码看起来像这样:
try
{
report.SetParameterValue("Id", id);
report.ExportToDisk(ExportFormatType.PortableDocFormat,
string.Format(@"{0}\{1}.pdf", new object[] { outputLocation, id}));
// ResultsText.Text += string.Format("Exported {0}\r\n", id);
}
catch (Exception ex)
{
ErrorsText.Text += string.Format("Failed to export {0}: {1}\r\n",
new object[] { id, ex.Message });
}
Run Code Online (Sandbox Code Playgroud)
还应该值得一提的是,该应用程序是一次性的事情,并不需要花费几个小时(或几天:)来生成所有报告.我主要担心的是,如果它达到系统内存限制,它将停止运行.
我没关系更新结果TextBox注释掉来运行这个东西,但我想知道是否有一种更有效的内存方式将数据附加到TextBox.Text未来的项目中.
我对使用StringBuilder课程感到困惑,首先:
一个
string对象串联操作总是创建从现有的一个新的对象string和新的数据.甲StringBuilder对象维护一个缓冲器,以适应新的数据的串联.如果房间可用,新数据将附加到缓冲区的末尾; 否则,分配一个新的较大缓冲区,将原始缓冲区中的数据复制到新缓冲区,然后将新数据附加到新缓冲区.
但是创建StringBuilder实例以避免创建新实例的重点在哪里String?这听起来像是"一对一"交易.
static void Main(string[] args)
{
String foo = "123";
using (StringBuilder sb = new StringBuilder(foo)) // also sb isn't disposable, so there will be error
{
sb.Append("456");
foo = sb.ToString();
}
Console.WriteLine(foo);
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
为什么我不应该只使用
+=
Run Code Online (Sandbox Code Playgroud)
编辑:好的,我现在知道如何重用的一个实例StringBuilder(仍然不知道这是否是正确的代码标准),但是这是不值得的只有一个使用string的,不是吗?
使用标记生成器和字符串生成器在htmlhelper类中创建表或使用HtmlTable有什么区别?
他们不是生成同样的事情吗?
可能重复:
使用C#的最佳字符串连接方法是什么?
嗨,
我有一个这样的代码片段,其中从文件中读取大量数据并检查每个位置的某些值并连接一个字符串.
这种字符串连接需要大量的时间和处理能力.有没有办法减少执行时间?
重要提示:阅读内容文件语法不正确只需要提出一个想法
string x;
while (var < File.Length)
{
if (File.Content[var] == "A")
{
x += 1;
}
else
{
x += 0;
}
var++;
}
Run Code Online (Sandbox Code Playgroud) 这些例子之间有区别吗?我应该在哪种情况下使用哪个?
var str1 = "abc" + dynamicString + dynamicString2;
var str2 = String.Format("abc{0}{1}", dynamicString, dynamicString2);
var str3 = new StringBuilder("abc").
Append(dynamicString).
Append(dynamicString2).
ToString();
var str4 = String.Concat("abc", dynamicString, dynamicString2);
Run Code Online (Sandbox Code Playgroud)
有类似的问题:
+运算符,并且在答案中甚至没有提到它被转换为String.Concat这个问题询问每种情况会发生什么,这些例子的实际输出是什么?他们有什么不同?在哪种情况下我应该在哪里使用它们?
由于某种原因,以下代码生成不包含声明的XML:
XDocument xDocument = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),
new XElement("project",
new XAttribute("number", project.ProjectNumber),
new XElement("store",
new XAttribute("number", project.StoreNumber)
),
// User Element
new XElement("user",
new XAttribute("owner-id", project.OwnerID ?? 0),
new XElement("email", new XCData(project.OwnerEmail ?? "")),
new XElement("project-name", new XCData(project.ProjectName ?? ""))
),
// Nested Project Element
new XElement("nested-project",
new XAttribute("version", new Version(1, 0)),
new XElement("project",
new XAttribute("version", new Version(1, 0)),
xProjectItems = new XElement("project-items")
),
new XElement("price-per-part", project.PricePerPart),
new XElement("sheet-quantity", project.SheetQuantity),
new XElement("edge-length", project.EdgeLength),
new XElement("price", project.Price),
new XElement("status", …Run Code Online (Sandbox Code Playgroud) c# ×9
.net ×5
string ×5
performance ×2
vb.net ×2
asp.net-mvc ×1
c#-4.0 ×1
linq-to-xml ×1
memory ×1
tagbuilder ×1
wpf ×1
xml ×1