【发布时间】:2019-03-07 12:53:44
【问题描述】:
我正在将一个项目从 Visual Basic 迁移到 C#,我不得不更改声明使用的 for 循环的方式。
在 VB.NET 中,for 循环声明如下:
Dim stringValue As String = "42"
For i As Integer = 1 To 10 - stringValue.Length
stringValue = stringValue & " " & CStr(i)
Console.WriteLine(stringValue)
Next
哪些输出:
42 1
42 1 2
42 1 2 3
42 1 2 3 4
42 1 2 3 4 5
42 1 2 3 4 5 6
42 1 2 3 4 5 6 7
42 1 2 3 4 5 6 7 8
在 C# 中,for 循环声明如下:
string stringValue = "42";
for (int i = 1; i <= 10 - stringValue.Length; i ++)
{
stringValue = stringValue + " " + i.ToString();
Console.WriteLine(stringValue);
}
还有输出:
42 1
42 1 2
42 1 2 3
这显然是不正确的,所以我不得不稍微更改代码并包含一个整数变量来保存字符串的长度。
请看下面的代码:
string stringValue = "42";
int stringValueLength = stringValue.Length;
for (int i = 1; i <= 10 - stringValueLength; i ++)
{
stringValue = stringValue + " " + i.ToString();
Console.WriteLine(stringValue);
}
还有输出:
42 1
42 1 2
42 1 2 3
42 1 2 3 4
42 1 2 3 4 5
42 1 2 3 4 5 6
42 1 2 3 4 5 6 7
42 1 2 3 4 5 6 7 8
现在我的问题解决了 Visual Basic 与 C# 在 Visual Basic 方面的不同之处,即使用 for 循环中的 stringValue.Length 条件,即使每次循环发生时字符串的长度都会发生变化。而在 C# 中,如果我在 for 循环条件中使用 stringValue.Length,它会在每次循环发生时更改初始字符串值。这是为什么呢?
【问题讨论】:
-
Microsoft 清楚地概述了您的问题是什么......
-
@Çöđěxěŕ:请停下。如果在不考虑上下文的情况下自动从标题中删除标签是有帮助的,那么网站就会这样做。
-
@Çöđěxěŕ 你可以找到一些关于here的信息
-
@Çöđěxěŕ 我不认为这两个帖子相互矛盾。关键是:不要在标题中笨拙地贴上标签,例如“关于这件事的问题 - 标签”。但是如果标题是一个包含标签的完整句子,那么 sometimes 就可以了。 “为什么迁移时 for 循环的行为不同”感觉这个标题太笼统了。
-
@Çöđěxěŕ“将 VB.NET 代码迁移到 C#”显然是一个完整的短语,为标题添加了有用的信息。不要进行会降低清晰度的编辑。希望这个概念足够常识,我们不需要 Meta 帖子来支持它。