问题:扩展方法必须是静态的
本文关键字:静态 扩展 方法 问题 | 更新日期: 2023-09-27 18:22:15
我有这个错误。
第一个错误:
扩展方法必须是静态
第二个错误:
"System.Windows.Controls.ComboBox"不包含的定义"GetClientItemId"且不接受任何扩展方法"GetClientItemsId"System.Windows.Controls.ComboBox"类型的第一个参数可以是已找到(您是否缺少using指令或程序集引用?)
我尝试将static应用于我的父类,比如:
之前-
public partial class pgRPhase : Window
之后
public static partial class pgRPhase : Window
但我随后收到了其他错误和问题。
WPF编码-
private async Task LoadRep(TruckServiceClient TSC, ComboBox combobox)
{
List<ClientItems> clientItems = new List<ClientItems>();
foreach (var rep in await TSC.GetRepByCompAsync())
clientItems.Add(new ClientItems { Id = rep.Id, Name = rep.Name, Contact = rep.ContactNumber, Email = rep.Email, CompanyId = rep.CompanyId });
combobox.ItemsSource = (clientItems.ToArray().Where(x => x.CompanyId == cbCustomer.GetClientItemId()));
combobox.IsEnabled = true;
combobox.SelectedIndex = 1;
combobox.DisplayMemberPath = "Id";
}
public static int GetClientItemId(this ComboBox combobox)
{
if (combobox.SelectedItem == null)
return 0;
else
return ((ClientItems)combobox.SelectedItem).Id;
}
您必须将GetClientItemId
放在一个单独的类中,并使该类成为static
。(扩展方法需要在静态类中)
通过使Window
类成为静态的,您可以破坏整个代码(您不能实例化窗口的实例,这是WPF工作所必需的)。如果你把这个方法分开,它会起作用的。
注意:将其作为一个扩展方法是很好的,但如果您将其作为通过GetClientItemId(cbCustomer)
调用的常规方法,它可能就足够好了。那你就不需要另一节课了。