gpt4 book ai didi

c# - 为什么这个 C# 代码没有编译?

转载 作者:行者123 更新时间:2023-11-30 13:07:39 25 4
gpt4 key购买 nike

为什么这个 C# 代码没有编译?

public static Dictionary<short, MemoryBuffer> GetBulkCustom(int bufferId,
int startSecond,out int chunksize, out int bardatetime)
{
//const string _functionName = "GetNextBulkWatchData";

UserSeriesCard currentCard = GetUserSeriesCard(bufferId);

Dictionary<short, MemoryBuffer> result = null;

while (currentCard.CurrentSecond <= startSecond)
result = GetBulk(bufferId, out chunksize, out bardatetime);

if (result == null)
{
result = currentCard.UserBuffer;
chunksize = currentCard.ChunkSize;
bardatetime = currentCard.CurrentBarDateTime;
}
return result;
}

错误:

The out parameter 'bardatetime' must be assigned to before control leaves the current method
The out parameter 'chunksize' must be assigned to before control leaves the current method

我想不出 bardatetime 和 chunksize 最终未分配的情况..

编辑。我通过将代码调整为逻辑上等效的代码来修复此错误。老实说,我想避免多次分配。

public static Dictionary<short, MemoryBuffer> GetBulkCustom(int bufferId, int startSecond,out int chunksize, out int bardatetime )
{
const string _functionName = "GetNextBulkWatchData";

UserSeriesCard currentCard = GetUserSeriesCard(bufferId);

Dictionary<short, MemoryBuffer> result = null;
chunksize = currentCard.ChunkSize;
bardatetime = currentCard.CurrentBarDateTime;

while (currentCard.CurrentSecond <= startSecond)
result = GetBulk(bufferId, out chunksize, out bardatetime);

if (result == null)
result = currentCard.UserBuffer;

return result;
}

最佳答案

如果从未输入 while 循环和“if 语句”主体,则不会分配输出参数。

逻辑上可能知道这些代码路径将始终被输入。 编译器 不知道这一点。编译器认为可以输入或跳过每个具有非常量条件的“if”和“while”。

在这种情况下,编译器可以进行更复杂的流分析。分析是“在 'if' 之前,结果要么为 null 要么不为 null;如果它为 null,则 'if' 主体分配输出参数。如果它不为 null,则可能发生的唯一方法是如果 ' while' body 分配了 out 参数,因此分配了 out 参数。"

那种级别的分析当然是可能的,但是规范中描述的现有流分析算法有一些很好的特性,即它快速易于理解易于实现通常准确并且仅提供误报,不提供漏报

关于c# - 为什么这个 C# 代码没有编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3804426/

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