字符串比较问题

本文关键字:问题 比较 字符串 | 更新日期: 2023-09-27 18:03:33

让我先说一下,我已经研究了我的问题,特别是这个问题和这个问题。然而,我的问题有点不同。我理解不同方法之间的差异,但我不能让我的代码在我的生命中正确运行。

在我的部分代码中,我有下面的比较。但是比较总是失败,打印出来的是"Type is:leg"。

if (String.Compare(timer.Type,"leg",true) == 0)
{
    timer.StopTime = DateTime.Now;
    // TODO Log into database here
    toRemove.Add(timer);
}
//Couple more conditions in here...
else
{
    Console.WriteLine("Attempting to remove cycle timer of invalid type");
    Console.WriteLine("Type is:" + timer.Type);
//TODO: Log error
}

我还尝试了其他方法,但似乎都不适合我。

if(timer.Type == "leg" || timer.Type == "Leg") //Fails
if(time.Type.Equals("leg") || timer.Type == "Leg") //Fails
String type = timer.Typer; //Worth a shot...
if(type == "leg" || type == "Leg") //No luck
编辑:需要更多的代码,所以这里是整个方法。
private void stopFinishedTimers(AGVData agv)
{
    List<CycleTimer> toRemove = new List<CycleTimer>();
    foreach (CycleTimer timer in AllRunningCycleTimers)
    {
        if (agv.CurrentRFIDNumber == timer.CycleStopRfid)
        {
            if (String.Compare(timer.Type,"leg",true) == 0)
            {
                timer.StopTime = DateTime.Now;
                // TODO Log into database here
                toRemove.Add(timer);
                }
            else if (timer.Type.Equals("route") || timer.Type.Equals("Route"))
            {
                timer.StopTime = DateTime.Now;
                // TODO Log into database here
                toRemove.Add(timer);
            }
            else
            {
                Console.WriteLine("Attempting to remove cycle timer of invalid type");
                Console.WriteLine("Type is:" + timer.Type);
                //TODO: Log error
            }
        }
    }

其中CycleTimers是一个包含type字段的类,通过属性访问

字符串比较问题

我来谈谈我的看法:

String type = timer.Typer似乎是错误的,因为在大多数示例中属性名称是Type。此外,if(time.Type.Equals("leg") || timer.Type == "Leg")似乎很可疑,因为您两次引用timetimer而不是相同的变量。

最后,由于文化信息和字符集差异等原因,I alwaysalways在比较。net中的字符串时使用StringComparison.Ordinal。我不确定这是否可能是一个问题,但请参阅此以获取更多信息。 编辑:

另外,StringComparison.OrdinalIgnoreCase也是一个选项。

调试并放一个break语句看看是什么定时器。Type等于,或者放一个Console.WriteLine(timer.Type.ToString())…计时器是否超出了范围?

或者将测试更改为timer.Type.ToString() == "Leg"