我正在嘗試創建用戶定義的函式來處理用戶嘗試添加具有重復 ID 的新用戶
我創建了這個:
public class DuplicateIdException:Exception
{
public DuplicateIdException(String message) : base(message)
{
}
public override string Message => $" --- {base.Message} --- ";
}
public class TestDuplicateIdException
{
static void validate(List<Object> Users)
{
bool flag = false;
Type DataType = Users[0].GetType();
List<DataType> UsersConverter = Users.Cast<DataType>().ToList();
flag = UsersConverter.Any(x => x.Id == Id);
if (flag)
{
throw new DuplicateIdException("Sorry, You duplicate the Id");
}
}
}
我有很多物件型別,并且它們都具有 Id 屬性,但是當我呼叫 object.Id 時它給出了錯誤并且無法正常作業。那么我該如何檢查它們并完成例外?
uj5u.com熱心網友回復:
您可以為所有具有 id 的類創建一個基類,如果需要,它可以是介面或基類。
public class EntityBase
{
public int Id { get; set; }
}
然后繼承/實作它
public class Users : EntityBase
{
}
public class Order : EntityBase
{
}
然后使用基類/介面進行驗證
public class ValidateDuplidateId
{
static void Validate(IEnumerable<EntityBase> entities,int id)
{
if (entities.Any(x => x.Id == id))
throw new Exception("Duplicate Id Found");
}
}
我不喜歡這種拋出例外來處理業務邏輯錯誤的方法,對我來說更好的方法是這樣的
public class Validator
{
public static bool IsDuplicateId(IEnumerable<EntityBase> entities,int id)
{
if (entities.Any(x => x.Id == id))
return true;
return false;
}
}
然后我將添加一個通用操作結果類來處理任何型別的物件
public class OperationReuslt<T>
{
public T Result { get; set; }
public bool Success { get; set; }
public string Message { get; set; }
}
在我的用戶服務中(例如)
public class UserSerivce
{
public OperationReuslt<Users>AddUser(int id)
{
//replace this with data from your actual data source
List<Users> users = new List<Users>();
if(Validator.IsDuplicateId(users,id))
{
return new OperationReuslt<Users>
{
Success = false,
Message = "Duplicate UserId"
};
}
// else proceed
}
}
您可以使用這種方法,因為它更具可讀性并且沒有拋出例外方法的性能缺陷,但最終這一切都取決于您的情況
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454115.html
