gpt4 book ai didi

c# - 在 C# 中设置 int 时,逗号运算符/分隔符的机制是什么?

转载 作者:行者123 更新时间:2023-11-30 14:06:02 25 4
gpt4 key购买 nike

我正在分析此 stackoverflow question 的已接受答案中的代码示例,其中包含此代码块:

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;

据我了解,与许多 C++ 运算符不同,逗号运算符被故意排除在 C# 规范之外;然而,上面的代码编译并运行得很好。

我知道您可以像这样声明多个以逗号分隔的变量:

int i, j, y;

甚至设置它们

int i = 0, j = 1, y = 2;

但是有问题的行出现在一个 while 循环中,并且包含一个(希望)已经声明和初始化的变量 chunkSize,以及一个在 下面的嵌套 while 循环中设置的变量>bytesRead。所以在多变量声明中使用逗号作为分隔符对我来说真的没有意义。

在上面的 C# 代码中,逗号运算符/分隔符的机制和行为是什么?另外,规范中是否有定义这些东西的地方?

最佳答案

这是定义两个变量。

int remaining = chunkSize, bytesRead;

相当于

int remaining = chunkSize;
int bytesRead; // uninitialized, gets set to bytesRead = input.Read(buffer,... below

这对我来说有点代码味,因为同一行中的多个声明很难理解,并且可能给人的印象是 remainingbytesRead 之间存在任何联系> 即使没有。

bytesRead 被设置为下面一行中的一个值 (input.Read),但是编译器需要知道 bytesRead 是一个 int。 C# 允许在方法中声明未初始化的变量,只要您在尝试使用它之前先对其进行初始化即可。

关于c# - 在 C# 中设置 int 时,逗号运算符/分隔符的机制是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51367640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com