避免覆盖对象上的属性
本文关键字:属性 对象 覆盖 | 更新日期: 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
的情况,所以当condition1
是True
时,我将"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 )