我有以下行:
var parseSortField = (BasicProfileSortableFields?)Enum.TryParse(typeof(BasicProfileSortableFields?), sortOptions.SortColumn, out BasicProfileSortableFields? sortField);
在 out 引數周圍,我收到一條錯誤訊息
引數 3:無法從“out Services.Models.BasicProfileSortableFields?”轉換 '出物件?
常規決議有效,但我試圖捕捉我的字串不在提到的列舉中的情況。此外,我參考的列舉來自一個 nuget 包,如果有幫助,我實際上并不是寫的。
uj5u.com熱心網友回復:
可以為空的列舉可以由Enum.TryParse
?:解決方法:使用三元條件運算子處理 null 情況
BasicProfileSortableFields temp;
BasicProfileSortableFields? parseSortField = Enum.TryParse<BasicProfileSortableFields>(sortOptions.SortColumn, out temp) ? (BasicProfileSortableFields?)temp : null);
uj5u.com熱心網友回復:
方法有兩種形式Enum.TryParse:
Type第一個引數和out object最后一個引數的非泛型- 沒有
Type引數的泛型(因為使用了泛型型別引數),out TEnum最后有一個引數
目前看起來你介于兩者之間 - 但最終引數可以為空(out TEnum?而不是out TEnum)。此外,您正在嘗試將TryParse方法的結果轉換為 enum 型別 - 而實際上它回傳一個bool說法是否決議成功。
我建議使用通用形式,代碼有點像 Fubo 的答案,但temp在呼叫中宣告變數“行內”:
var sortField =
Enum.TryParse<BasicProfileSortableFields>(sortOptions.SortColumn, out var temp)
? temp
: default(BasicProfileSortableFields?);
uj5u.com熱心網友回復:
Enum.TryParse回傳一個布林值,第三個引數是out object?. 您可能想Enum.Parse改用?在這種情況下,只需消除第三個引數,并將呼叫包裝在 try..catch 中,如果您愿意在決議失敗時進行處理。
另外,我認為您希望第一個引數是列舉的型別,而不是列舉的 Nullable 包裝器的型別,但我可能會誤會。
或者,要繼續使用TryParse,您應該首先檢查結果以查看決議是否失敗,并將 out 引數獲取為object?,然后如果決議成功,您可以將其轉換為目標型別,如下所示:
BasicProfileSortableFields parseSortField;
if(Enum.TryParse(typeof(BasicProfileSortableFields), sortOptions.SortColumn, out object? sortField))
{
parseSortField = (BasicProfileSortableFields)sortField.Value;
}
else
{
// Handle failed parse condition here
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/426102.html
