退货类型错误
本文关键字:错误 类型 | 更新日期: 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)
这应该奏效。