我在这里有一个疑问。在测试两个if
条件之后,它仅存储第二个条件值。如果条件为真,如何存储两个条件值。在执行第二个if
条件后,第一个if
条件值就会超载。
我的模型如下所示。
public class TimesheetError
{
public string Status { get; set; }
public string Messsage { get; set; }
public string ListErrors { get; set; }
public bool IsNotValid { get; set; }
}
我的方法如下。
public TimesheetError Validate(Client client)
{
TimesheetError error = new TimesheetError();
if (client.Name.IsEmpty())
{
error.Messsage = "Bad request";
error.ListErrors = "name is not enterd";
error.Status = "Not Found";
error.IsNotValid = true;
}
if (client.Contact.FirstName.IsEmpty())
{
error.Messsage = "Bad Request";
error.ListErrors = "Contact name is not entered";
error.Status = "Not Found";
error.IsNotValid = true;
}
return error
}
答案 0 :(得分:3)
将您的方法更改为返回此对象列表
public List<TimesheetError> Validate(Client client)
{
List<TimesheetError> listerror=new List<TimesheetError>();
if (client.Name.IsEmpty())
{
TimesheetError error = new TimesheetError();
error.Messsage = "Bad request";
error.ListErrors = "name is not enterd";
error.Status = "Not Found";
error.IsNotValid = true;
listerror.Add(error);
}
if (client.Contact.FirstName.IsEmpty())
{
TimesheetError error = new TimesheetError();
error.Messsage = "Bad Request";
error.ListErrors = "Contact name is not entered";
error.Status = "Not Found";
error.IsNotValid = true;
listerror.Add(error);
}
return listerror
}
答案 1 :(得分:1)
由于您只有一个TimesheetError
,因此您将覆盖第二个if
语句中的属性。如果您想存储所有可能的错误,可以使用List<TimesheetError>
:
public IEnumerable<TimesheetError> Validate(Client client)
{
var errors = new List<TimesheetError>();
if (client.Name.IsEmpty())
{
var error = new TimesheetError();
error.Messsage = "Bad request";
error.ListErrors = "name is not enterd";
error.Status = "Not Found";
error.IsNotValid = true;
errors.Add(error);
}
if (client.Contact.FirstName.IsEmpty())
{
var error = new TimesheetError();
error.Messsage = "Bad Request";
error.ListErrors = "Contact name is not entered";
error.Status = "Not Found";
error.IsNotValid = true;
errors.Add(error);
}
return errors;
}
您可以使用Enumerable.Any
检查是否存在错误,或使用FirstOrdefault
获取第一个(如果没有则使用null)。或者使用循环:
foreach(TimesheetError error in Validate(client))
{
// ...
}
我的个人偏好仅仅是IEnumerable<T>
而不是List<T>
。为什么允许此方法的调用者在列表中添加或删除错误?
答案 2 :(得分:0)
相应地确定您的消息。
public TimesheetError Validate(Client client)
{
TimesheetError error = new TimesheetError();
if (client.Name.IsEmpty())
{
error.Messsage = "Bad request";
error.ListErrors = "name is not enterd";
error.Status = "Not Found";
error.IsNotValid = true;
}
if (client.Contact.FirstName.IsEmpty())
{ error.Messsage += " Bad Request";
error.ListErrors += " Contact name is not entered";
error.Status += " Not Found";
error.IsNotValid += true;
}
return error
答案 3 :(得分:0)
我不理解你想要什么,如果他们都是第二个如果覆盖在第一个中输入的值,如果你想存储两个都将你的模型更改为你想要多个值的值列表......
public class TimesheetError
{
public List<string> Statuses { get; set; }
public List<string> Messsage { get; set; }
public List<string> ListErrors { get; set; }
public bool IsNotValid { get; set; }
}
答案 4 :(得分:0)
是的,您的第二个条件将覆盖您的第一个if
条件错误值,因为error
是一个引用类型,其值在第二个条件下更新,解决方法是创建一个{{1}列表} object,因此您可以向TimesheetError
添加尽可能多的TimesheetError
个对象,
List<TimesheetError>
答案 5 :(得分:0)
如果您需要从方法中返回两个不同的“错误”,则需要返回一组错误,例如,您需要更改方法,如下所示:
public List<TimesheetError> Validate(Client client)
{
....
然后,在创建错误对象时,将它们添加到列表中:
List<TimesheetError> errors = new List<TimesheetError>();
if (client.Name.IsEmpty())
{
TimesheetError error = new TimesheetError();
error.Messsage = "Bad request";
error.ListErrors = "name is not enterd";
error.Status = "Not Found";
error.IsNotValid = true;
errors.Add(error);
}
if (client.Contact.FirstName.IsEmpty())
{
TimesheetError error = new TimesheetError();
error.Messsage = "Bad Request";
error.ListErrors = "Contact name is not entered";
error.Status = "Not Found";
error.IsNotValid = true;
}
return errors