我正在使用StreamWriter
类将一些文本写入新创建的文本文件,但输出总是奇怪,这是我的代码:
StreamWriter sw = new StreamWriter("newtextfile.txt", false, Encoding.Unicode);
for (int d = 0; d < count; d++)
{
sw.WriteLine(d + '^' + str1[d] + '^' + str2[d] + '^' + str3[d]);
}
sw.Flush();
sw.Close();
输出如下(这是文件的开头):
65342STR1^STR2^STR3
65343STR1^STR2^STR3
...等
我不知道为什么WriteLine
会跳过d + '^'
并写下该随机数。
答案 0 :(得分:4)
尝试使用"
:
sw.WriteLine(d + "^" + str1[d] + "^" + str2[d] + "^" + str3[d]);
使用像
这样的表达式int d = 0;
var t = d + '^'; // int + char
t
的类型为int
,而不是string
。
在您的情况下,65342
(== 0xFF3E
)会出现,因为它是这个特殊^
字符的Unicode(全宽抑扬音)。
答案 1 :(得分:2)
它正在添加char literal&#39; ^&#39;的整数值。到d,所以d=123
然后d + '^' = 217
。改为使用字符串文字。
sw.WriteLine(d + "^" + str1[d] + "^" + str2[d] + "^" + str3[d]);
答案 2 :(得分:2)
问题是这个表达式:
d + '^'
不涉及任何字符串。它正在尝试添加int
和char
,它将char
推广到int
(其值为65342,因为这是UTF-16) '^'
)的代码单元,然后执行常规数字加法。然后,结果(int
)将转换为字符串,因为后续+
运算符的右侧操作数为str1[d]
。
您可以使用字符串文字:
d + "^" + ...
但我个人会使用格式代替:
sw.WriteLine("{0}^{1}^{2}^{3}", d, str1[d], str2[d], str3[d]);
在我看来,这更容易阅读。