这是一个简单的代码,在将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;
}
答案 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"
...并期望此方法在true
为MySessionInfo.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;
}