以下の HttpGet 関数を取得して、すべての応答 (#2 で示される) を設定するにはどうすればよいですか? 各応答の追加を処理する適切な型のコレクションを宣言できないようです。これまでに試したことはすべて、コンパイラ エラーが発生しました。
'式の型 null を戻り型 T に変換できません'.
C#/ASP.NET/MVC 5.1/.NET 4.5
public async Task<IList<T>> Query<T>(string query)
{
var response = await _serviceHttpClient.HttpGet<IList<T>>(string.Format("query?q={0}", query), "records");
return response;
}
public async Task<T> HttpGet<T>(string urlSuffix, string nodeName)
{
// #1 var list = ???
var r = new QueryResult<T>();
do
{
r = await HttpGetInternal<T>(urlSuffix, nodeName);
// #2 list = r.Records
} while (!string.IsNullOrEmpty(r.NextRecordsUrl));
return // #3 list;
}
private async Task<QueryResult<T>> HttpGetInternal<T>(string urlSuffix, string nodeName)
{
var url = Common.FormatUrl(urlSuffix, _instanceUrl, _apiVersion);
var request = new HttpRequestMessage()
{
RequestUri = new Uri(url),
Method = HttpMethod.Get
};
request.Headers.Add("Authorization", "Bearer " + _accessToken);
var responseMessage = await _httpClient.SendAsync(request);
var response = await responseMessage.Content.ReadAsStringAsync();
if (responseMessage.IsSuccessStatusCode)
{
var jObject = JObject.Parse(response);
var jToken = jObject.GetValue(nodeName);
var res = JsonConvert.DeserializeObject<T>(jToken.ToString());
var r = new QueryResult<T>()
{
NextRecordsUrl = jObject.GetValue("nextRecordsUrl").ToString(),
Records = res
};
return r;
}
var errorResponse = JsonConvert.DeserializeObject<ErrorResponses>(response);
throw new ForceException(errorResponse[0].errorCode, errorResponse[0].message);
}
public class QueryResult<T>
{
public int TotalSize { get; set; }
public bool Done { get; set; }
public string NextRecordsUrl { get; set; }
public T Records { get; set; }
}