Twitter不通过REST API为用户提供生日。因此我准备了可以为空的DateTime属性。
我还为所有社交网络服务准备了一个接口。其中大多数都是asyn Task方法。
但是我无法传递这个错误:即使我没有使用该对象,对象引用也没有设置为对象的实例。
接口方法GetUserBirthDayAsync实现如下Twitter服务:
public Task<DateTime?> GetUserBirthDayAsync(){
return null; // because twitter does not provide user birthday like faceBK
}
这就是我使用方法的方法:
DateTime? BirthDate = await socialNetworkService.GetUserBirthDayAsync();
将值设置为BirthDate变量时发生错误。
发生了什么事?是什么导致了这个问题。
答案 0 :(得分:8)
试试这个:
public Task<DateTime?> GetUserBirthDayAsync()
{
return Task.Run(() => (DateTime?)null);
}
或者,更好的方法:
public Task<DateTime?> GetUserBirthDayAsync()
{
return Task.FromResult<DateTime?>(null);
}
当您只返回null
时,您的任务为null
,而不是异步方法的结果。
答案 1 :(得分:4)
另一种方法是使用Task.FromResult<DateTime?>(null)
作为
public Task<DateTime?> GetUserBirthDayAsync()
{
return Task.FromResult<DateTime?>(null);
}
创建一个已成功完成的任务 指定的结果。
与其他选项几乎相同,但恕我直言,它看起来更清洁。
答案 2 :(得分:1)
你在null上调用await。我想你有这样的想法:
public Task<DateTime?> GetUserBirthDayAsync(){
return Task.Run(() => (DateTime?)null); // because twitter does not provide user birthday like faceBK
}
答案 3 :(得分:1)
即使我没有使用对象
是的, 使用该对象。 null
的对象是您从Task<DateTime?>
返回的GetUserBirthDayAsync()
。并且当您尝试await
此任务时使用它。
因此NullReferenceException
引发await
(或编译器为其创建的代码)。
所以你可能想做的就是返回Task<DateTime?>
作为结果类型返回null
:
public Task<DateTime?> GetUserBirthDayAsync(){
return Task.Run(() => (DateTime?)null);
}