如何在列表中存储值

时间:2014-01-07 10:49:26

标签: c# asp.net asp.net-web-api

我在这里有一个疑问。在测试两个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
}

6 个答案:

答案 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>。为什么允许此方法的调用者在列表中添加或删除错误?

Should I always return IEnumerable<T> instead of IList<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