可以使用 as 操作符将 parameter.FindName(strArray[1]) 转换为 FrameworkElement 类型,这样就可以避免拆箱操作。修改后的代码如下:

foreach (var element in parameter.Children.OfType()) { //判断键值对,传入element,判断键值对是否有这个类型 // 判断当前控件的类型是否存在验证方法 if (validationMethods.TryGetValue(element.GetType(), out var validationMethod)) { string[] strArray = validationMethod(element).Split(','); if (!strArray[1].Contains("powerW")) { string name = cannotEmpty.SelectName(strArray[1]); var control = parameter.FindName(strArray[1]) as FrameworkElement; // 使用 control 进行操作 } } }

另外,可以考虑将不能空的控件名称缓存起来,避免每次都调用 SelectName 方法。例如:

var cannotEmptyNames = validationMethods.Values .SelectMany(method => method(null).Split(',')) .Where(str => !str.Contains("powerW")) .Select(str => cannotEmpty.SelectName(str)) .Distinct() .ToList();

foreach (var element in parameter.Children.OfType()) { //判断键值对,传入element,判断键值对是否有这个类型 // 判断当前控件的类型是否存在验证方法 if (validationMethods.TryGetValue(element.GetType(), out var validationMethod)) { string[] strArray = validationMethod(element).Split(','); if (!strArray[1].Contains("powerW") && cannotEmptyNames.Contains(strArray[1])) { var control = parameter.FindName(strArray[1]) as FrameworkElement; // 使用 control 进行操作 } } }

这样可以减少重复的操作,提高代码效率

WPF C# foreach var element in parameterChildrenOfTypeFrameworkElement 判断键值对传入element判断键值对是否有这个类型 判断当前控件的类型是否存在验证方法 if validationMethodsTryGetValueelement

原文地址: https://www.cveoy.top/t/topic/cRm5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录