字符串比较问题

时间:2015-07-20 19:36:45

标签: c#

首先让我说我已经阅读了我的问题,特别是this questionthis one also。然而,我的问题有点不同。我理解不同方法之间的差异,但无法使我的代码在我的生活中正确运行。

在我的部分代码中,我有以下比较。但比较总是失败,并且“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的字段的类,通过属性访问。

2 个答案:

答案 0 :(得分:2)

我要加两分钱:

SET SERVEROUTPUT ON SET VERIFY OFF ACCEPT total_order_no PROMPT 'Enter order number to calculate total' DECLARE total_order_no varchar2(6) := &total_order_no; total number; v_order_code customer_order.order_code%type; BEGIN /*I assumed you are looking for just one value and total_order_no is the value to perform the searching of that order number */ SELECT ORDER_CODE INTO v_order_code FROM customer_order WHERE order_code = total_order_no; total := CALCULATE_BILL_FOR_ORDER(v_order_code); EXCEPTION WHEN OTHERS THEN dbms_output.put_line('No such order' || total_order_no || ' - ' || sqlcode); END; / 似乎有误,因为在大多数示例中,属性名称为String type = timer.Typer。另外Type似乎也很可疑,因为您同时引用if(time.Type.Equals("leg") || timer.Type == "Leg")time而不是相同的变量。

最后,由于文化信息和字符集差异等原因,在比较.Net中的字符串时,我总是 总是使用timer。我不确定如果这可能是一个问题,但请参阅this以获取更多信息。

编辑:

另外,StringComparison.Ordinal也是一种选择。

答案 1 :(得分:1)

调试并输入break语句以查看timer.Type等于什么,或者放入Console.WriteLine(timer.Type.ToString())...计时器是否已超出范围?

或者可能将测试更改为timer.Type.ToString()==&#34; Leg&#34;