Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# if-else if用于变量C的多个可能值#_C#_If Statement - Fatal编程技术网

C# if-else if用于变量C的多个可能值#

C# if-else if用于变量C的多个可能值#,c#,if-statement,C#,If Statement,我有一个if-else-if构造,其中我根据XName元素本地名设置变量的特定值,如下所示: public struct UserObject { public string rawValue; } var xmlElements= record.Descendants("abc") .Select(x => x.Elements().ToArray()); f

我有一个if-else-if构造,其中我根据XName元素本地名设置变量的特定值,如下所示:

   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语句来实现相同的功能?

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

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

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
}

它是字符串类型->对象是自定义用户定义的对象,并将其添加到所有三个if-else块中的类似对象列表中,以执行相同的操作。您应该在列表中创建一个字符串列表,其中包含
b036
b037
b040
,然后在列表上使用
Contains
Linq方法检查
element.Name.LocalName
是否在列表中,并设置
userObject.rawValue
的值如果是真的,我想根据哪个元素设置原始值**“b036”->“b037”->“b040”**(这是需要的层次顺序)有一个值;如果“b036”XElement不存在,则应将该值设置为XElement标记“b037”中存在的任何值,否则设置为“b040”@Darshak我相信您需要以基本上其他的方式实现代码,使用2种方法:(1)根据层次结构找到任何合适的元素;(2)从找到的方法中提取名称。项(1)应该尝试搜索每个元素并首先返回满意的结果。此外,如果没有必需的元素,请检查大小写。@RustemMustafin您可以给我演示此方法的实现吗?我想根据哪个元素“b036”->“b037”->“b040”有值来设置原始值;如果“b036”“XElement不存在它应该将值设置为XElement标记“b037”中的任何值,否则设置为“b040”@Darshak这将复制您的代码。由于您只引用了一个
元素
变量,因此我看不出您的代码如何更改为第一个元素。我正在寻找代码的这一部分,以查看哪个元素存在并首先出现。我想将rawValue设置为元素的特定值这似乎对我不起作用;这只提供了1个值,覆盖了以前设置的值,并最终采用“b040”XElement name的值,而不是“b036”的值(如果存在且exists@Dashak我认为您需要显示更多的代码来解释如何设置
元素
变量。