C# c-在列表中找到正确的元素

C# c-在列表中找到正确的元素,c#,list,find,C#,List,Find,我需要在列表中获得第一个非空值,这是代码,但我需要处理的情况很少: string field = new List<string>() {field1, field2, field3, field4,}.Find(x => !String.IsNullOrEmpty(x) ); 这是可行的,但这是我需要处理的情况:如果field1='abc'和field2='def'我需要取字段2,那么如果field1='abc'我需要取第一个字段!='abc'和not null,如果其他字

我需要在列表中获得第一个非空值,这是代码,但我需要处理的情况很少:

string field = new List<string>() {field1, field2, field3, field4,}.Find(x => !String.IsNullOrEmpty(x) );

这是可行的,但这是我需要处理的情况:如果field1='abc'和field2='def'我需要取字段2,那么如果field1='abc'我需要取第一个字段!='abc'和not null,如果其他字段为null,我需要使用字段1,我如何在查找中执行此操作?

使用Skip方法


下面应该用一个简单的for循环和一些ifs来回答您的问题:


您的意思是要获取第二个非空元素,如果没有这样的元素,则获取第一个?^或非abc的第一个非空元素。否则,第一个元素是abc?@devNull是的,这就是我的意思。我的问题更多的是关于这个:abc是第一个非空元素还是一个常量?这是两个完全不同的地方approaches@Rafalon这是一个常量,如果其他字段为空,我需要取field1-我假设OP意味着,在这种情况下,如果field3也为空,那么结果应该是abc。这是目前无法做到的。但我可能误解了这个问题
string field1 = null, field2 = "abc", field3 = "def", field4 = null;
string[] input = { field1, field2, field3, field4};
string result = input.SkipWhile(x => x != "abc").Skip(1).FirstOrDefault(x => x != null);
// First non-null different from 'abc' unless there's none
// then first non-null
static string SecondOrFirstNonNull(List<string> list)
{
    string s = null;
    
    for(int i = 0; i < list.Count; i++)
    {
        // We found a non-null element..
        if(!string.IsNullOrEmpty(list[i]))
        {
            s = list[i];
            
            // .. and it's different from 'abc' !
            if(list[i] != "abc")
            {
                // so we can stop iterating through the list
                break;
            }
        }
    }
    
    return s;
}