【问题标题】:Issue with : Extension method must be static问题:扩展方法必须是静态的
【发布时间】:2015-11-17 08:59:20
【问题描述】:

我有这个错误。

第一个错误:

扩展方法必须是静态的

第二个错误:

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

【问题讨论】:

    标签: c# wpf wcf c#-4.0


    【解决方案1】:

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

    通过将Window 类设为静态,您会破坏整个代码(您无法实例化窗口的实例,这是 WPF 工作所必需的)。如果你把方法分开,它会起作用。

    注意:把它做成一个扩展方法很好,但是当你把它做成一个通过GetClientItemId(cbCustomer)调用的常规方法时,它可能会工作得很好。那么你就不需要其他课程了。

    【讨论】:

    • 第二个注意事项:等待:foreach (var rep in await TSC.GetRepByCompAsync())。 (不可否认,当你写的时候它可能不在那里……)
    猜你喜欢
    • 2011-08-31
    • 2023-03-10
    • 1970-01-01
    • 2018-11-01
    • 2012-01-01
    相关资源
    最近更新 更多