2016-06-24 9 views
2

TwitterはREST APIを通じてユーザーに誕生日を提供しません。そのため、null可能なDateTimeプロパティを用意しました。オブジェクト参照がオブジェクトを使用していなくてもオブジェクトのインスタンスに設定されていない

私は、すべてのソーシャルネットワークサービスのためのインターフェースも用意しました。それらのほとんどはasynタスクメソッドです。

しかし、私はこのエラーを渡すことはできません:私はオブジェクトを使用していないにもかかわらず、オブジェクトの参照がオブジェクトのインスタンスに設定されていません。

インターフェイスメソッドGetUserBirthDayAsyncは、Twitterのサービスのために従うとして実装されています。

public Task<DateTime?> GetUserBirthDayAsync(){ 
    return null; // because twitter does not provide user birthday like faceBK 
} 

、これは私がこの方法を使用する方法である:

DateTime? BirthDate = await socialNetworkService.GetUserBirthDayAsync(); 

エラーが誕生日の変数に値を設定する上で発生しました。

何が起こっていますか?問題の原因同じことを行うために、より良い方法を

public Task<DateTime?> GetUserBirthDayAsync() 
{ 
    return Task.Run(() => (DateTime?)null); 
} 

または::

答えて

4

これを試してみてください

あなただけの意味 nullを返す
public Task<DateTime?> GetUserBirthDayAsync() 
{ 
    return Task.FromResult(<DateTime?>null); 
} 

、あなたのタスクは、非同期メソッドの結果ではない、nullです。

+1

'Task.FromResult( null)'は同じことを述べる方がはるかに良い方法です。 – spender

+0

@spenderさんがあなたの例を追加しました。回答を自由に編集してください。あなたが思うなら、改善することができます! – Backs

1

nullでawaitを呼び出します。

public Task<DateTime?> GetUserBirthDayAsync(){ 
    return Task.Run(() => (DateTime?)null); // because twitter does not provide user birthday like faceBK 
} 
+0

私はDependency Injectionを使用しているので、実際にBirthdateを返すTwitterServiceまたはFacebookServiceを使用しているかどうかわからないため、私はawaitを使用しました。 – ash

1

even though am not using the object

はい、あなたあるは、オブジェクトを使用して:私はあなたが心の中でこのような何かを持っていたと思います。 nullのオブジェクトは、GetUserBirthDayAsync()から返されたTask<DateTime?>です。そして、あなたがこの作業をawaitにしようとすると、それを使用します。

したがってNullReferenceExceptionawait(またはコンパイラが作成するコード)によって生成されます。

だから、あなたはおそらく何をしたいのか、結果型としてnull返しTask<DateTime?>を返すことです:

public Task<DateTime?> GetUserBirthDayAsync(){ 
    return Task.Run(() => (DateTime?)null); 
} 
+0

あなたは正しいと思っていました。ありがとう – ash

3

代替は、同じようにTask.FromResult<DateTime?>(null)

を使用することができます。ほとんど

public Task<DateTime?> GetUserBirthDayAsync() 
{ 
    return Task.FromResult<DateTime?>(null); 
} 

MSDN Documentation

Creates a Task that's completed successfully with the specified result.

他のオプションと同じですが私見、それは非常にきれいに見えます。

関連する問題