我有一個字串:
private const string Codes = "2,10";
public void method()
{
var displayCodes = Codes.Split(',');
DemoResponse response = webService.GetResponse(); //getting response from API
if(response.Errors.Any(x => displayCodes.Contains(x.StackTrace))
{
int myCode = int.Parse(response.Errors.Select(x => x.StackTrace).FirstOrDefault());
}
}
這是“DemoResponse”模型:
public class DemoResponse
{
public bool Validate { get; set; }
public IEnumerable<ErrorResponse> Errors { get; set; }
}
public class ErrorResponse
{
public string Message { get; set; }
public string StackTrace { get; set; }
}
來自 API 的 DemoResponse“回應”回傳結果為:(例如)
{
"Validate" : false,
"Errors" :
{
"Message" : "test1",
"StackTrace" : "2"
}
}
{
"Validate" : false,
"Errors" :
{
"Message" : "test1",
"StackTrace" : "2"
}
}
{
"Validate" : false,
"Errors" :
{
"Message" : "test1",
"StackTrace" : "95"
}
}
DemoResponse“回應”將始終僅包含來自常量字串“Codes”的代碼之一,即 2 或 10。但可能包含其他代碼。
如果 DemoResponse “回應”包含代碼 2 作為第一個代碼,則此行作業正常:
int myCode = int.Parse(response.Errors.Select(x => x.StackTrace).FirstOrDefault());
但是,如果 DemoResponse“回應”沒有第一個代碼 2,那么我如何撰寫 LINQ 來選擇代碼 2 并分配給“myCode”變數?例如:
"StackTrace" : "95",
"StackTrace" : "95",
"StackTrace" : "2"
uj5u.com熱心網友回復:
需要在 if 條件內為每個回圈添加。
private const string Codes = "2,10";
public void method()
{
var displayCodes = Codes.Split(',');
DemoResponse response = webService.GetResponse(); //getting response from API
if(response.Errors.Any(x => displayCodes.Contains(x.StackTrace))
{
foreach (ErrorResponse item in response.Errors)
{
// write your logic based on your requirement
if(int.Parse(item.StackTrace) == 2)
{
int myCode = int.Parse(item.StackTrace);
}
}
}
}
uj5u.com熱心網友回復:
在我看來,您希望從 API 接收的是一個資訊陣列,但是在您的代碼中,您將從 API 接收到的內容映射到型別為 的單個物件中DemoResponse。我懷疑您實際上想要response成為s的串列或陣列DemoResponse。
此外,根據我對以下問題的理解:
但是,如果 DemoResponse“回應”沒有第一個代碼 2,那么我如何撰寫 LINQ 來選擇代碼 2 并分配給“myCode”變數?
, 要將與StackTrace,中的任何代碼匹配Codes的第一個值分配給myCode; 而不是為 分配任何 StackTrace值myCode。
如果這兩個假設是正確的,您可以嘗試以下操作:
private const string Codes = "2,10";
public void method()
{
var displayCodes = Codes.Split(',');
// NOTE: response is now an array of DemoResponse;
// GetResponse()'s implementation and return type may need to be rewritten accordingly
DemoResponse[] response = webService.GetResponse();
var errors = response.SelectMany(r => r.Errors);
if (errors.Any(x => displayCodes.Contains(x.StackTrace)))
{
int myCode = int.Parse(errors.Select(x => x.StackTrace).First(s => displayCodes.Contains(s)));
}
}
或者,您可以查看堆疊跟蹤而不是錯誤:
var stackTraces = response.SelectMany(r => r.Errors).Select(e => e.StackTrace);
if (stackTraces.Any(s => displayCodes.Contains(s)))
{
int myCode = int.Parse(stackTraces.First(s => displayCodes.Contains(s)));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/364966.html
上一篇:Watson助手中的變數
