避免覆盖对象的属性

时间:2014-05-20 01:48:48

标签: c#

我创建了一个这样的对象:

MyObjectClass obj = new MyObjectClass();
foreach( .... )
{
   if( condition1 )
     FillMyObjectWith(obj, "hello", "", "");
   if( condition2)
    FillMyObjectWith(obj, "" , "hello" , "");
}
/////

private void FillMyObjectWith(MyobjectClass obj, string val1, string val2, string val3)
{
  obj.Field1 = val1;
  obj.Field2 = val2;
  obj.Field3 = val3;
}

注意我使用"else"用于if条件,因为在for each loop中存在两个条件也可以是true的情况,所以当{ {1}} condition1我将“hello”传递给True并将空白传递给其他两个字段,当Field1为真时我将“hello”传递给condition2并且其余的字段都是空白的。 问题是如果两个条件都为真,则最后一次调用将覆盖其中一个字段为空字符串的“hello”值。 我该如何避免这种情况?

3 个答案:

答案 0 :(得分:3)

你可以试试这个:

private void FillMyObjectWith(MyobjectClass obj, string val1, string val2, string val3)
    {
        if (!string.IsNullOrEmpty(val1))
            obj.Field1 = val1;
        if (!string.IsNullOrEmpty(val2))
            obj.Field2 = val2;
        if (!string.IsNullOrEmpty(val3))
            obj.Field3 = val3;
    }

private void FillMyObjectWith(MyobjectClass obj, string val1, string val2, string val3)
    {
        obj.Field1 = val1 ?? string.Empty;
        obj.Field2 = val2 ?? string.Empty;
        obj.Field3 = val3 ?? string.Empty;
    }

答案 1 :(得分:2)

你可以这样做:

foreach( .... )
{
   if ( condition1 && condition2)
      FillMyObjectWith(obj, "hello", "hello", "");
   else if( condition1 )
      FillMyObjectWith(obj, "hello", "", "");
   else if( condition2)
      FillMyObjectWith(obj, "" , "hello" , "");
}

答案 2 :(得分:1)

看起来你只是在每个条件上设置一个值并将其余条件留空,所以一种方法是将方法签名更改为只接受三个参数。一个包含您要设置的值,一个是Enumeration,您将其标记为显示值的分配位置,然后在方法检查中Enum并根据该值分配值。

FillMyObjectWith(MyobjectClass obj, string val1, Enum )
相关问题