错误的退货类型

时间:2013-07-17 18:04:06

标签: c# return-type

我不明白为什么我会收到错误:

  

“System.Collections.Generic.List   Notify.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;
        }

有谁知道我哪里出错了?

5 个答案:

答案 0 :(得分:10)

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

private void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {

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

答案 1 :(得分:3)

webClient.OpenReadCompleted += webClient_OpenReadCompleted;只是注册一个事件。当事件exicute时,它实际上不会运行该行代码。

换句话说

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


 }

答案 2 :(得分:2)

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

答案 3 :(得分:1)

OpenReadCompleted事件是委托类型OpenReadCompletedEventHandler的事件,根据其documentation,它返回一个空格:

public delegate void OpenReadCompletedEventHandler(
    Object sender,
    OpenReadCompletedEventArgs e
)

因此,您无法使用返回其他内容的函数。

答案 4 :(得分:0)

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


private List webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)


private void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)

应该这样做。