【发布时间】:2010-07-24 23:30:24
【问题描述】:
什么是 C snprintf() 的 C# 模拟?
snprintf(buf, sizeof(buf), outfilename, frame);
它的确切类比是什么?
【问题讨论】:
标签: c# c translation printf
什么是 C snprintf() 的 C# 模拟?
snprintf(buf, sizeof(buf), outfilename, frame);
它的确切类比是什么?
【问题讨论】:
标签: c# c translation printf
StringBuilder.AppendFormatString.Format 是最接近的。它执行相同的操作,但请注意格式字符串为in a different format。
使用String.Format:
string buf = string.Format("{0}", frame);
使用StringBuilder.AppendFormat:
StringBuilder builder = new StringBuilder();
builder.AppendFormat("{0}", frame);
【讨论】:
最基本的版本是String.Format。
string result = String.Format(format, arg0, arg1, ..., argn);
但许多其他类也支持类似的东西,包括派生自TextWriter 的所有类。这个问题有一些例子Which methods in the 3.5 framework have a String.Format-like signature?
Console.WriteStreamWriter.WriteStringWriter.WriteStringBuilder.AppendFormat【讨论】:
如果要分配给字符串,请使用 String.Format
var newString = String.Format("Number: {0}", 10);
如果您要附加大量字符串,请使用 StringBuilder.AppendFormat。从长远来看,它会为您节省空间,因为它们可以被链接起来,从而节省空间。
var result = new StringBuilder().AppendFormat("{0}", 10).AppendFormat("{0}", 11).ToString();
【讨论】:
它的确切类比是什么?
没有确切的类比,因为:
C 和 C# 中的字符串的实现方式不同。在 C 中,字符串是可变的字符数组,而在 .NET 中,它们是不可变的对象实例。因此,在 .NET 中,您不会像 snprintf 那样“写入缓冲区”,您只需创建一个全新的字符串
.NET 中使用的格式字符串(String.Format、Console.WriteLine 等)与 C 非常不同(不同的占位符格式)
正如其他答案中提到的,最接近的等价物是String.Format,但它绝对不是一个精确的模拟
【讨论】: