繁体   English   中英

如果否则,则为变量C#提供多个可能的值

[英]if else if for multiple possible values for a variable C#

我有一个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语句来实现相同的目的?

由于要查找某些元素中最大值的值,因此请进行最大搜索。 通过自己滚动,可以避免扫描或测试两次。

首先,创建一个变量来表示有趣名称的优先级:

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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM