C# 如何编写分析和检查列表值的linq语句

C# 如何编写分析和检查列表值的linq语句,c#,linq,C#,Linq,我有一个IList,它的值如下: string[] tags = {"firstValue:1","secondValue:5", "thirdValue:10"} var answer = tags.FirstOrDefault(tag => tag.Split(':')[0] == "secondValue").Split(':')[0]; 有没有一种简单的方法可以编写Linq语句而不必遍历每个值 这就是我到目前为止所做的: var secondValue = tags.First

我有一个IList,它的值如下:

string[] tags = {"firstValue:1","secondValue:5", "thirdValue:10"}
var answer = tags.FirstOrDefault(tag => tag.Split(':')[0] == "secondValue").Split(':')[0];
有没有一种简单的方法可以编写Linq语句而不必遍历每个值

这就是我到目前为止所做的:

var secondValue = tags.FirstOrDefault(tag => tag.Split(':')[0] == "secondValue");
var answer = secondValue.Split(':')[1];

虽然这样做有效,但我希望使用一种更简洁的方法,不必将字符串拆分两次

好的,您自己已经得到了答案,您可以这样将它们连接在一起:

string[] tags = {"firstValue:1","secondValue:5", "thirdValue:10"}
var answer = tags.FirstOrDefault(tag => tag.Split(':')[0] == "secondValue").Split(':')[0];
在您的情况下,您可以跳过第一次拆分,如:

var answer = tags.FirstOrDefault(tag => tag.StartsWith("secondValue:")).Split(':')[0];
对于空检查,只需执行以下操作:

var answer = tags.FirstOrDefault(t => t.StartsWith("secondValue:"))?.Split(':')[1] ?? "0";

你自己已经得到了答案,你可以这样把它们结合在一起:

string[] tags = {"firstValue:1","secondValue:5", "thirdValue:10"}
var answer = tags.FirstOrDefault(tag => tag.Split(':')[0] == "secondValue").Split(':')[0];
在您的情况下,您可以跳过第一次拆分,如:

var answer = tags.FirstOrDefault(tag => tag.StartsWith("secondValue:")).Split(':')[0];
对于空检查,只需执行以下操作:

var answer = tags.FirstOrDefault(t => t.StartsWith("secondValue:"))?.Split(':')[1] ?? "0";

如果您想使用字典路径(如果您多次使用列表,则更可取),则无需拆分两次:

static void  Main(string[] args)
{
    var tags =new List<string> { "firstValue:1", "secondValue:5", "thirdValue:10" };
    var dict= tags.Select(s => s.Split(':')).ToDictionary(ss => ss[0], ss => ss[1]);
    var sec = dict["secondValue"];
    Console.WriteLine(sec);
    var exists = dict.Keys.Contains("nonexist");
    Console.WriteLine(exists);
    if (!dict.TryGetValue("nonexist", out string nonexistValue))
            nonexistValue = "99";
    }
    Console.WriteLine(nonexistValue);
}

如果您想使用字典路径(如果您多次使用列表,则更可取),则无需拆分两次:

static void  Main(string[] args)
{
    var tags =new List<string> { "firstValue:1", "secondValue:5", "thirdValue:10" };
    var dict= tags.Select(s => s.Split(':')).ToDictionary(ss => ss[0], ss => ss[1]);
    var sec = dict["secondValue"];
    Console.WriteLine(sec);
    var exists = dict.Keys.Contains("nonexist");
    Console.WriteLine(exists);
    if (!dict.TryGetValue("nonexist", out string nonexistValue))
            nonexistValue = "99";
    }
    Console.WriteLine(nonexistValue);
}

你想要的结果是什么?也许你可以将列表转换为字典?我想要一种更简洁的方法,而不是拆分两个。你想要的结果是什么?也许你可以将列表转换为字典?我想要一种更简洁的方法,而不是拆分两个。是的,这看起来更简洁。有没有一种方法可以在列表中不存在的情况下进行空检查?@RDoolabh当然有。请看我编辑的答案。是的,那似乎更简洁。有没有一种方法可以在列表中不存在的情况下进行空检查?@RDoolabh当然有。请看我编辑的答案。