我有一个if-else if构造,在其中要根据XName Element本地名称设置变量的特定值,如下所示:
public struct UserObject
{
public string rawValue;
}
var xmlElements= record.Descendants("abc")
.Select(x => x.Elements().ToArray());
foreach (XElement[] elements in xmlElements)
{
foreach (XElement element in elements)
{
UserObject userObject = new UserObject();
if (element.Name.LocalName == "b036") //"b036" is a XML element tag name
userObject.rawValue = (element.Value.Trim()); //note rawvalue is of string type
else if (element.Name.LocalName == "b037")
userObject.rawValue = (element.Value.Trim());
else if (element.Name.LocalName == "b040")
userObject.rawValue = (element.Value.Trim());
}
要加载的userObject(rawvalue
)的名称,我想遵循以下层次结构顺序:-
b036, PersonName (e.g., John Smith) if not available use b037
b037, PersonName (e.g., Smith, John) if not available use b040
b040, KeyNames, a.k.a Last Name (e.g., Smith)
If none of b036, b037 or b040 are found, I do not want to set the "rawvalue" for that record
如何构造if-else语句,还是应该使用switch case语句来实现相同的目的?
答案 0 :(得分:0)
由于您要查找某些元素中最大值的值,因此请进行最大搜索。通过自己滚动,可以避免扫描或测试两次。
首先,创建一个变量来表示有趣名称的优先级:
var hierarchy = new[] { "b040", "b037", "b036" };
现在设置一些变量以记住到目前为止找到的最大候选数:
XElement candidate = null;
int candidatePos = -1;
最后,检查所有XMLElement
值并记住找到的最大值:
foreach (var element in xmlElements.SelectMany(elements => elements)) {
var pos = Array.IndexOf(hierarchy, element.Name.LocalName);
if (pos >= 0) {
if (candidate == null || pos > candidatePos) {
candidate = element;
candidatePos = pos;
}
}
}
如果找到最大值,则可以使用它:
if (candidate != null) { //"b036" is a XML element tag name
UserObject userObject = new UserObject();
userObject.rawValue = (candidate.Value.Trim()); //note rawvalue is of string type
// work with userObject
}