我创建了一个这样的对象:
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”值。
我该如何避免这种情况?
答案 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 )