退货类型错误

本文关键字:错误 类型 | 更新日期: 2023-09-27 18:22:48

我不明白为什么我会得到一个错误:

'System.Collections.Generic.ListNotify.MainPage.webClient_OpenReadCompleted(对象,System.Net.OpenReadCompletedEventArgs)'具有错误的返回类型

代码:

webClient.OpenReadCompleted += webClient_OpenReadCompleted;

和:

private List<SightingType> webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            DataContractJsonSerializer ser = null;
            var sightingT = new List<SightingType>();
            try
            {
                ser = new DataContractJsonSerializer(typeof(ObservableCollection<SightingType>));
                ObservableCollection<SightingType> sightingTypes = ser.ReadObject(e.Result) as ObservableCollection<SightingType>;
                foreach (var sightingType in sightingTypes)
                {
                    sightingT.Add(sightingType);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return sightingT;
        }

有人知道我哪里错了吗?

退货类型错误

事件处理程序的返回类型应为void:

private void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {

另一端没有任何东西可以接收返回数据。

webClient.OpenReadCompleted += webClient_OpenReadCompleted;只是在注册一个事件。当事件退出时,它实际上并没有运行那行代码。

换句话说,

这个

webClient.OpenReadCompleted += webClient_OpenReadCompleted;

不等于这个

 var item = yourMethodCall();

如果你想从完成的事件中检索信息,那么你需要创建一个属性或全局变量,并在完成的完成时分配它

所以也许可以试试

public List<SightingType> sightingT = new List<SightingType>();
private void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
            DataContractJsonSerializer ser = null;
            try
            {
                ser = new DataContractJsonSerializer(typeof(ObservableCollection<SightingType>));
                ObservableCollection<SightingType> sightingTypes = ser.ReadObject(e.Result) as ObservableCollection<SightingType>;
                foreach (var sightingType in sightingTypes)
                {
                    sightingT.Add(sightingType);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

 }

WebClient.OpenReadCompleted是一个事件。事件处理程序是必须定义void返回类型的委托。您的处理程序定义了一个返回类型List<SightingType>。因此,您的处理程序具有错误的返回类型。

OpenReadCompleted事件是委托类型OpenReadCompletedEventHandler的事件,根据其文档,它返回一个void:

public delegate void OpenReadCompletedEventHandler(
    Object sender,
    OpenReadCompletedEventArgs e
)

因此,不能使用返回其他内容的函数。

事件处理程序必须返回void。在您的代码中,更改:


private List webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)


private void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)

这应该奏效。