首页 > 解决方案 > C# 分配列表.Count 减一到整数不起作用

问题描述

以下代码行让我感到困惑:

int durationEventsCountMinusOne = (durationEvents.Count - 1);

等于durationEvents.Count1。因此我假设 durationEventsCountMinusOne 将变为 0,但它保持为 1。我首先在 for 语句的初始化程序中有这段代码。

我使用了 Visual Studio 调试器,但找不到它为什么会这样工作。当我将鼠标悬停-1在调试时,它显示为 0;它只是没有分配给整数。

我正在使用的代码,省略了一些代码

List<IEvent> durationEvents = new List<IEvent>();
while (currentEvent != null && currentEvent.Time <= (currentCalculation * secondsBetweenCalculations) / 60)
{
    // This runs once, because there is only one event in schedule.
    durationEvents.Add(currentEvent);
    currentEvent = Schedule.schedule.GetNextEvent();
}

// here durationEvents.Count is equal to 1, but using minus 1 behind it does not assign 0 to the durationEventsMinusOne
int durationEventsCountMinusOne = (durationEvents.Count-1);
for (int durationEventIndex = durationEvents.Count-1; durationEventIndex >= 0; durationEventIndex--)
{
    do stuff with duration event
}

显示问题的屏幕截图 调试

编辑 相同的代码库适用于 Visual Studio Code,而不是 Visual Studio Community 2019

标签: c#value-type

解决方案


不要尝试在 VS 调试器中调试代码。尝试在执行语句之前和之后添加调试打印。这将向您展示真实的图片。添加 Console.WriteLine(...) 如果您的应用程序是控制台应用程序,如果不是,添加 Debug.Print(...) 根据我的经验,您会在查看打印输出后立即看到问题

列表持续时间事件 = 新列表();while (currentEvent != null && currentEvent.Time <= (currentCalculation * secondsBetweenCalculations) / 60) { // 运行一次,因为调度中只有一个事件。durationEvents.Add(currentEvent); currentEvent = Schedule.schedule.GetNextEvent(); }

// here durationEvents.Count is equal to 1, but using minus 1 behind it does not assign 0 to the durationEventsMinusOne
Console.WriteLine(durationEvents.Count);
Console.WriteLine(durationEvents.Count  - 1);
int durationEventsCountMinusOne = (durationEvents.Count-1);
Console.WriteLine(durationEventsCountMinusOne);
for (int durationEventIndex = durationEvents.Count-1; durationEventIndex >= 0; durationEventIndex--)
{
    do stuff with duration event
}

推荐阅读