如何在较大的字符串中完全匹配字符串?

时间:2014-07-08 18:23:04

标签: c# winforms .net-3.5

我声明了以下枚举:

public enum EtcMethod
{
    ACCORD,
    COROLLA,
    COROLLA_S,
    CAMRY,
    CIVIC
}

在我的表单上,我有一些控件及其Tag属性设置:

myControl1.Tag = "ACCORD";
myControl2.Tag = "COROLLA";
myControl3.Tag = "CIVIC COROLLA_S CAMRY";

然后我检查控件'循环中的标记,以查看是否找到任何值:

    private void HideControls(EtcMethod etcMethod, LayoutControlGroup lcg)
    {
        foreach (BaseLayoutItem ctl in lcg.Items)
        {
            if (ctl.GetType() == typeof (LayoutControlItem))
            {
                LayoutControlItem item = (LayoutControlItem)ctl;

                if (item.Tag.ToString().IndexOf(etcMethod.ToString()) >= 0)
                    item.Visibility = LayoutVisibility.Always;
                else
                    item.Visibility = LayoutVisibility.Never;
            }
        }
    }

但问题是,例如,如果etcMethodCOROLLAitem.Tag.ToString()"COROLLA_S",则会错误地通过检查。

如何确保它找到完全匹配而不是"部分"比赛?换句话说,我希望它表现得好像你已经检查了#34;匹配整个单词"使用Visual Studio的查找功能选项。

我能想到的唯一解决方案是检查etcMethod.Lenght+1处字符的值,看看它是否为空格(表示另一个枚举值的开头)或者该位置是否存在(表示标签的结束),但这似乎特别草率。

2 个答案:

答案 0 :(得分:2)

为什么不让你Split并使用包含?

if (item.Tag.ToString().Split().Contains(etcMethod.ToString()))

这将首先在Tag空格分割,如果它没有空格,只需将其转换为字符串数组,然后在数组上使用Contains将查找完全匹配。

答案 1 :(得分:0)

这可能是一个解决方案:

if (item.Tag.ToString() + " ").IndexOf(etcMethod.ToString() + " ") >= 0)
相关问题