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

时间:2015-11-17 08:59:21

标签: c# wpf wcf c#-4.0

我有这个错误。

第一个错误:

  

扩展方法必须是静态的

第二个错误:

  

' System.Windows.Controls.ComboBox'不包含的定义   ' GetClientItemId'没有扩展方法' GetClientItemId'验收   类型为' System.Windows.Controls.ComboBox'的第一个参数。可能   发现(您是否缺少using指令或程序集引用?)

我尝试将静态应用于我的父类,如:

之前 -

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;
}

1 个答案:

答案 0 :(得分:2)

您必须将GetClientItemId放在一个单独的班级中并制作该班级static。 (扩展方法需要在静态类中)

通过使Window类保持静态,可以破坏整个代码(无法实例化窗口的实例,这是WPF工作所必需的)。如果您拆分该方法,它将起作用。

注意:使这个扩展方法很好,但当你只使用GetClientItemId(cbCustomer)调用的常规方法时,它可能会运行得很好。那你就不需要另一个班了。