클라이언트 (Windows CE 핸드 헬드 장치)의 98-lb- 약한 특성으로 인해 각 결과 집합을 작게 유지하기 위해 더 이상 데이터가 반환되지 않을 때까지 내 웹 API 메서드를 호출하기 위해)이 코드를 사용하고 있습니다 :conditon 동안 "placeholder"를 사용하지 않고 할 일이있을 때까지 안전하게 반복 할 수 있습니까?
while (moreRecordsExist)
{
redemptionsList.redemptions.Clear();
string uri = String.Format("http://platypus:28642/api/Redemptions/{0}/{1}", lastIdFetched, RECORDS_TO_FETCH);
var webRequest = (HttpWebRequest)WebRequest.Create(uri);
webRequest.Method = "GET";
using (var webResponse = (HttpWebResponse)webRequest.GetResponse())
{
if (webResponse.StatusCode == HttpStatusCode.OK)
{
var reader = new StreamReader(webResponse.GetResponseStream());
string s = reader.ReadToEnd();
var arr = JsonConvert.DeserializeObject<JArray>(s);
if (null == arr) break;
foreach (JObject obj in arr)
{
id = obj.Value<int?>("Id") ?? 0;
var _redemptionId = obj.Value<string>("RedemptionId") ?? "";
var _redemptionItemId = obj.Value<string>("RedemptionItemId") ?? "";
var _redemptionName = obj.Value<string>("RedemptionName") ?? "";
double _redemptionAmount = obj.Value<double?>("RedemptionAmount") ?? 0.0;
var _redemptionDept = obj.Value<string>("RedemptionDept") ?? "";
var _redemptionSubdept = obj.Value<string>("RedemptionSubDept") ?? "";
redemptionsList.redemptions.Add(new HHSUtils.Redemption
{
Id = id,
RedemptionId = _redemptionId,
RedemptionItemId = _redemptionItemId,
RedemptionName = _redemptionName,
RedemptionAmount = _redemptionAmount,
RedemptionDept = _redemptionDept,
RedemptionSubDept = _redemptionSubdept,
});
} // foreach
} // if ((webResponse.StatusCode == HttpStatusCode.OK) && (webResponse.ContentLength > 2))
} // using HttpWebResponse
int recordsAdded = LocalDBUtils.BulkInsertRedemptions(redemptionsList.redemptions);
totalRecordsAdded += recordsAdded;
//moreRecordsExist = (recordsToFetch > (totalRecordsAdded));
lastIdFetched = id;
} // while
이 (작동 내가 널 위해 WebResponse를을 체크하면) NullReferenceException이와 충돌하지만, 한 번에 도달하지 않습니다 나는, 내 while 루프처럼 정말하지 않습니다 moreRecordsExist는 false로 지정됩니다. 그래서, Resharper 사냥개를 느슨하게하여 더 좋은 제안이 있는지 확인했지만, "Expression is always true"라고 말하면서 그 라인에 "나와있는"수정을하는 것이 "while (사실) "
나는 그것이 많은 개선 방법을 보지 못했다.
더 똑똑한 구조로 같은 것을 달성 할 수있는 방법이 있습니까?
나는 이미 귀하의 첫 번째 진술을 언급했으며, 나는 거기에 해결책이 내 자신보다 낫지 않다고 말했다. 어쩌면 내가 틀렸어. –
"there"= "their" –
@ClayShannon 맞습니다. 큰 도움은 아니지만 적어도이 루프는 break 문으로 끝날 수 있다고 명시해야합니다. 코드를 읽는 누군가가 여분의 moreRecordsExist 변수를 추적 할 필요가 없습니다. 또한 매핑 부분을 자체 기능으로 이동하면 읽기 쉽습니다. –