避免覆盖对象上的属性

本文关键字:属性 对象 覆盖 | 更新日期: 2023-09-27 18:04:03

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

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的情况,所以当condition1True时,我将"hello"传递给Field1并将空白传递给其他两个字段,当condition2为真时,我将"hello"传递给Field2并将空白传递给其余字段。问题是,如果两个条件都为真,最后一次调用将用空字符串覆盖其中一个字段的"hello"值。我怎样才能避免这种情况呢?

避免覆盖对象上的属性

你可以试试:

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;
    }

你可以这样做:

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

看起来您只在每个条件上设置一个值,而将其余部分留空,因此一种方法是更改方法签名以仅接受三个参数。一个携带你想要设置的值,一个是一个Enumeration,你标记它来显示值在哪里被分配,然后在你的方法中检查Enum并根据它分配值。

FillMyObjectWith(MyobjectClass obj, string val1, Enum )
相关文章: