C#.NET中的简单字符串数组迭代不起作用

时间:2011-01-05 20:34:09

标签: c# string

这是一个简单的代码,在将String数组中的每个元素与会话变量进行比较后,它应该返回true或false。事实是,即使名为'plans'的字符串数组获得正确的属性,在foreach内部它仍然只在第一个元素上进行迭代,所以如果Session变量匹配不同于数组中第一个元素的其他元素,它永远不会返回true ......你可以说问题就在那里,但是我看不清楚......我已经做了一百次,我无法理解我做错了什么......谢谢< / p>

protected bool ValidatePlans()
{
    bool authorized = false;

    if (RequiredPlans.Length > 0)
    {
        string[] plans = RequiredPlans.Split(',');
        foreach (string plan in plans)
        {
            if (MySessionInfo.Plan == plan)
                authorized = true;
        }
    }
    return authorized;
}

8 个答案:

答案 0 :(得分:1)

您可能需要考虑使用Array.IndexOf()而不是自己完成所有工作:

protected bool ValidatePlans()
{
    return (RequiredPlans.Length > 0
        && Array.IndexOf(RequiredPlans.Split(','), MySessionInfo.Plan) >= 0);
}

答案 1 :(得分:1)

您的代码对我来说很好,但您可以用以下内容替换整个内容:

return RequiredPlans.Length > 0 && RequiredPlans.Split(',').Any(s => MySessionInfo.Plan == s);

答案 2 :(得分:0)

我相信在通过string.split添加值之前,你需要明确设置字符串数组“计划”的长度...

编辑:不,我错了......填充数组的方法应该可以正常工作。忽略我的回答

答案 3 :(得分:0)

protected bool ValidatePlans()
{   
    if (RequiredPlans.Length > 0)
    {
        string[] plans = RequiredPlans.Split(',');
        foreach (string plan in plans)
        {
            if (MySessionInfo.Plan == plan)
                return true;
        }
    }

    return false;
}

答案 4 :(得分:0)

一些可能性:

一个。假设MySessionInfo.Plan没有强类型为字符串,请尝试

如果(MySessionInfo.Plan.Equals(方案)) {    authorized = true;    打破; }

B中。执行.split之后,在比较期间确保没有尾随空格。你可以做一个MySessionInfo.Plan.Equals(plan.Trim())

℃。不确定“foreach它只在第一个元素上迭代”,意思是。你确定循环没有通过数组中的其他元素吗?

答案 5 :(得分:0)

我不是100%确定我理解你的问题,但我想知道你是否使用了这样的字符串:

"Blue, Green"

...并期望此方法在trueMySessionInfo.Plan时返回"Green"(无空格)。 如果这是问题,那么只需要在Split结果中留出额外空间就可以了。可以通过更改此问题来解决此问题:

if (MySessionInfo.Plan == plan)

......对此:

if (MySessionInfo.Plan == plan.Trim())

如果不是这样,那么也许我误解了你的问题。

修改:从your comment to HABJAN's answer开始,我不得不问:发布的代码 完全相同 >你正在使用的实际代码?如果是这样,我不得不挠头,因为我不清楚他建议的修改(虽然它是一个好的,因为它使方法更有效)可以解决你的问题。

答案 6 :(得分:0)

  

当然,RequiredPlans是一个类似的字符串   =“蓝色,绿色”

如果这是您的输入看起来的样子,那么我认为问题不是您多次迭代第一个值,而是您没有修剪值。所以在第一个之后的所有东西都有一个领先的空间并且匹配失败。

尝试

if (MySessionInfo.Plan == plan.Trim())

答案 7 :(得分:0)

确保RequiredPlans确实具有唯一的字符串项,即确保它不返回蓝色,蓝色,蓝色。

第二个像其他提到的那样确保.Trim()比较,以及为什么不抛出.ToLower()以确保不存在区分大小写的问题。

如果其中的所有内容都应该清楚地起作用。如果没有创建临时的RequiredPlans字符串,以确保它作为单独的测试。

protected bool ValidatePlans()
{   
    if (RequiredPlans.Length > 0)
    {
        string[] plans = RequiredPlans.Split(',');
        foreach (string plan in plans)
        {
            if (MySessionInfo.Plan.Trim().ToLower() == plan.Trim().ToLower())
                return true;
        }
    }

    return false;
}