在单元测试中,我想将一行代码硬编码为字符串.
在C#我会这样做
var sb = new StringBuilder();
sb.AppendLine("myline1");
sb.AppendLine("myline2");
sb.AppendLine("myline3");
Run Code Online (Sandbox Code Playgroud)
自从我转换为F#后,我试图通过使用来减少.Net方法的使用bprintf,但不知何故没有bprintfn支持这对我来说很奇怪.
\r\n手动添加每行末尾很繁琐.
还是有比这更好的方法StringBuilder吗?
Kit*_*Kit 83
鲜为人知的特征:你确实可以缩进字符串内容 - 用反斜杠结束每一行.剥离以下行的前导空格:
let poem = "The lesser world was daubed\n\
By a colorist of modest skill\n\
A master limned you in the finest inks\n\
And with a fresh-cut quill.\n"
Run Code Online (Sandbox Code Playgroud)
如果您希望将这些嵌入到最终字符串中,您仍然需要包含\n或\n\r在行尾(如上例所示).
byt*_*ter 50
如果你在F#3.0下,三引号字符串可能是答案:
let x = """
myline1
myline2
myline3"""
Run Code Online (Sandbox Code Playgroud)
Jon*_*rop 11
我很惊讶没人提到这个:
[ "My first line"
"second line"
"another line" ]
|> String.concat "\n"
Run Code Online (Sandbox Code Playgroud)
我认为使用StringBuilderF#没有问题.
有一个函数fprintfn在printf的模块,这样你就可以与使用StringWriter对象:
let sw = new StringWriter()
fprintfn sw "myline1"
fprintfn sw "myline2"
fprintfn sw "myline3"
sw.ToString()
Run Code Online (Sandbox Code Playgroud)
我喜欢fprintf,fprintfn因为他们很灵活.您可以通过提供stdout来写入控制台输出.
您可以在F#中直接创建多行字符串文字:
let multiLineStr =
"myline1
myline2
myline3"
Run Code Online (Sandbox Code Playgroud)
和C#:
var multiLineStr =
@"myline1
myline2
myline3";
Run Code Online (Sandbox Code Playgroud)