问题:扩展方法必须是静态的

本文关键字:静态 扩展 方法 问题 | 更新日期: 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)调用的常规方法,它可能就足够好了。那你就不需要另一节课了。