我声明了以下枚举:
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;
}
}
}
但问题是,例如,如果etcMethod
为COROLLA
且item.Tag.ToString()
为"COROLLA_S"
,则会错误地通过检查。
如何确保它找到完全匹配而不是"部分"比赛?换句话说,我希望它表现得好像你已经检查了#34;匹配整个单词"使用Visual Studio的查找功能选项。
我能想到的唯一解决方案是检查etcMethod.Lenght+1
处字符的值,看看它是否为空格(表示另一个枚举值的开头)或者该位置是否存在(表示标签的结束),但这似乎特别草率。
答案 0 :(得分:2)
为什么不让你Split
并使用包含?
if (item.Tag.ToString().Split().Contains(etcMethod.ToString()))
这将首先在Tag
空格分割,如果它没有空格,只需将其转换为字符串数组,然后在数组上使用Contains
将查找完全匹配。
答案 1 :(得分:0)
这可能是一个解决方案:
if (item.Tag.ToString() + " ").IndexOf(etcMethod.ToString() + " ") >= 0)