問題陳述
我已經看到與Remora Results類似的東西,但由于許可證,我無法使用它。FooBarResult我的目標是從結果或錯誤中實體化 a ,然后將其傳遞給另一個組件。在另一個組件中,它被檢查IsSuccesful并依賴于它,要么執行BadRequest(FooBarResult.ErrorMsg)要么Ok(FooBarResult.Payload)執行(僅作為示例)。
我聽說過 Either monad,但我無法真正理解它。相反,我嘗試以簡單的方式在FooBarResult課堂上做到這一點。但是,使用起來并不安全,因為我仍然可能以錯誤的方式使用該物件。
public class FooBarResult
{
public bool IsSuccessful { get; set; }
public string? Payload { get; set; }
public string? ErrorMsg { get; set; }
public FooBarResult(string error)
{
IsSuccessful = false;
ErrorMsg = error;
}
public FooBarResult(string payload) // that won't work
{
IsSuccessful = true;
Payload = payload;
}
}
問題
如何根據生成結果的操作的成功來創建包含有效負載和錯誤訊息的結果類?有效載荷甚至可以是通用的 T 物件并且錯誤也可以嗎?
uj5u.com熱心網友回復:
對于“避免錯誤使用”部分,你可以做這樣的事情(我個人不會,但是嘿......)
public class FooBarResult
{
public bool IsSuccessful {get; set;}
// just doing one to demonstrate
private string _payload;
public string Payload
{
// InvalidOperationException is the ...
// "The exception that is thrown when a method call is invalid
// for the object's current state."
get {
if(IsSuccessful) return _payload;
throw new InvalidOperationException();
}
set { _payload = value; }
}
}
見https://dotnetfiddle.net/fqpSQS
以供參考:
無效操作例外
注意:一旦您嘗試序列化/反序列化,這可能會給您帶來麻煩。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/476527.html
標籤:C#
下一篇:C#XML反序列化忽略默認值屬性
