C# MVVM场景下如何判断输入字符串是否匹配模型静态变量名
检查输入是否匹配Variables类的静态字段名
方案1:预定义字段名集合(推荐,性能最优)
用nameof关键字预定义字段名集合,避免硬编码字符串,字段名修改时编译自动同步:
// 在ViewModel或合适位置定义静态集合 private static readonly HashSet<string> VariablesNames = new HashSet<string> { nameof(Variables.Var1), nameof(Variables.Var2), nameof(Variables.Var3) }; // 输入有效性检查逻辑 if (VariablesNames.Contains(UserInput.Name)) { // 输入符合要求,执行后续逻辑 }
方案2:反射动态获取字段名(适合字段动态增减的场景)
通过反射遍历Variables类的公共静态只读字段,自动提取名称:
// 一次性初始化字段名集合(静态初始化确保只执行一次) private static readonly HashSet<string> VariablesNames = typeof(Variables) .GetFields(BindingFlags.Public | BindingFlags.Static) // 筛选只读且类型为UInt16的字段 .Where(field => field.IsInitOnly && field.FieldType == typeof(ushort)) .Select(field => field.Name) .ToHashSet(); // 检查逻辑同方案1 if (VariablesNames.Contains(UserInput.Name)) { // 输入有效 }
额外说明
- 若需要忽略大小写匹配,可修改
Contains方法参数:VariablesNames.Contains(UserInput.Name, StringComparer.OrdinalIgnoreCase) - 方案1无反射开销,适合字段固定的场景;方案2无需手动维护集合,适合字段频繁变动的情况
内容的提问来源于stack exchange,提问作者user23586147
相关产品推荐
相关产品推荐

