处理用户尝试在 C# 中添加具有重复 ID 错误的新用户
Handling User tries to add a new user with a duplicate id error in c#
我正在尝试创建用户定义的函数来处理用户尝试添加具有重复 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 时它给出了错误并且无法正常工作。那么我如何检查它们并完成异常?
您可以为所有具有 id 的 class 创建一个基础 class,如果需要,它可以是一个接口或基础 class。
public class EntityBase
{
public int Id { get; set; }
}
然后inherit/implement它
public class Users : EntityBase
{
}
public class Order : EntityBase
{
}
然后用基数验证class/interface
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;
}
}
然后我将添加一个通用的操作结果class来处理任何类型的对象
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
}
}
您可以使用这种方法,因为它更具可读性,并且没有像抛出异常方法那样的性能缺陷,但最终这一切都取决于您的情况
我正在尝试创建用户定义的函数来处理用户尝试添加具有重复 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 时它给出了错误并且无法正常工作。那么我如何检查它们并完成异常?
您可以为所有具有 id 的 class 创建一个基础 class,如果需要,它可以是一个接口或基础 class。
public class EntityBase
{
public int Id { get; set; }
}
然后inherit/implement它
public class Users : EntityBase
{
}
public class Order : EntityBase
{
}
然后用基数验证class/interface
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;
}
}
然后我将添加一个通用的操作结果class来处理任何类型的对象
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
}
}
您可以使用这种方法,因为它更具可读性,并且没有像抛出异常方法那样的性能缺陷,但最终这一切都取决于您的情况