简单改进:
if (values[0].Equals(detailsData.Attr1) &&
values[1].Equals(detailsData.Attr2) &&
values[2].Equals(detailsData.Attr3) &&
values[3].Equals(detailsData.Attr4) &&
values[4].Equals(detailsData.Attr5))
{
return true;
}
如果你只在一个地方做这件事,我不会再费心了。如果你在几个地方做同样的事情,你可能会考虑设置一个函数,例如将你Details
变成另一个函数List<string>
,然后使用 eg 比较它们SequenceEquals
。
编辑:虽然我考虑得越多,将平面字符串列表与类层次结构中的一个进行比较似乎越是一个坏主意,这是一个如何以可扩展方式执行此操作的示例。基类“消耗”前两个值,然后交给派生类检查其余值:
class MainDetails
{
string Attr1 { get; set; }
string Attr2 { get; set; }
protected virtual bool Matches(IEnumerator<string> e)
{
// Check the first two items exist and match
return
e.MoveNext() && e.Current.Equals(Attr1) &&
e.MoveNext() && e.Current.Equals(Attr2);
}
public bool Matches(IEnumerable<string> details)
{
using (var e = details.GetEnumerator())
{
// Check the details match. (Optionally check
// that there are no "extra" details.)
return Matches(e); // && !e.MoveNext();
}
}
}
class Details : MainDetails
{
string Attr3 { get; set; }
string Attr4 { get; set; }
string Attr5 { get; set; }
protected override bool Matches(IEnumerator<string> e)
{
// Check the MainDetails match, and the next three too.
return base.Matches(e) &&
e.MoveNext() && e.Current.Equals(Attr3) &&
e.MoveNext() && e.Current.Equals(Attr4) &&
e.MoveNext() && e.Current.Equals(Attr5);
}
}
...
List<string> values = getValues();
Details detailsData = getDetails();
if (detailsData.Matches(values))
return true;
我不确定您的确切用例,但希望这能给您一些想法。