我正在对此stackoverflow question的可接受答案中分析代码示例,其中包含以下代码块:
exports.help = help;
下面的代码让我陷入循环:
gulp.task("help", help);
据我了解,与许多C ++运算符不同,逗号运算符被故意排除在C#规范之外;但是,上面的代码可以编译并运行良好。
我知道您可以像这样声明多个逗号分隔的变量:
public static void SplitFile(string inputFile, int chunkSize, string path)
{
const int BUFFER_SIZE = 20 * 1024;
byte[] buffer = new byte[BUFFER_SIZE];
using (Stream input = File.OpenRead(inputFile))
{
int index = 0;
while (input.Position < input.Length)
{
using (Stream output = File.Create(path + "\\" + index))
{
int remaining = chunkSize, bytesRead;
while (remaining > 0 && (bytesRead = input.Read(buffer, 0,
Math.Min(remaining, BUFFER_SIZE))) > 0)
{
output.Write(buffer, 0, bytesRead);
remaining -= bytesRead;
}
}
index++;
Thread.Sleep(500); // experimental; perhaps try it
}
}
}
甚至设置它们
int remaining = chunkSize, bytesRead;
但是该行出现在while循环中,并且包含(希望)已经声明并初始化了int i, j, y;
的一个变量,以及包含在int i = 0, j = 1, y = 2;
下的嵌套while循环中设置的一个变量。因此,在多变量声明中使用逗号作为分隔符对我来说真的没有任何意义。
在上面的C#代码中,逗号运算符/分隔符的机制和行为是什么?另外,规范中是否有定义这些东西的地方?
答案 0 :(得分:6)
这是定义两个变量。
int remaining = chunkSize, bytesRead;
等同于
int remaining = chunkSize;
int bytesRead; // uninitialized, gets set to bytesRead = input.Read(buffer,... below
对我来说,这有点代码气味,因为同一行中的多个声明很难遵循,并且可能给人一种印象,即使remaining
和bytesRead
之间存在任何联系, t。
bytesRead设置为下面一行中的值(input.Read),但是在某些情况下,编译器需要知道bytesRead是一个int值。 C#允许在方法中声明未初始化的变量,只要您在尝试使用它之前对其进行了初始化。
答案 1 :(得分:1)