C# 需要从集合中获取值吗?

C# 需要从集合中获取值吗?,c#,C#,我有一个类型为List 我还有一个字符串的值,它与Detail.L中的值相匹配 是否有一种简单的方法可以获得与此匹配的Detail.R的值?当然可以,使用LINQ to Objects(假设您使用的是.NET 3.5或更高版本): 显然,这将找到第一场比赛。如果要获取所有匹配项,可以执行以下操作: var matchingRs = details.Where(d => d.L == searchText) .Select(d => d.

我有一个类型为
List

我还有一个字符串的值,它与Detail.L中的值相匹配


是否有一种简单的方法可以获得与此匹配的Detail.R的值?

当然可以,使用LINQ to Objects(假设您使用的是.NET 3.5或更高版本):

显然,这将找到第一场比赛。如果要获取所有匹配项,可以执行以下操作:

var matchingRs = details.Where(d => d.L == searchText)
                        .Select(d => d.R);

当然,使用LINQ对象(假设您使用的是.NET 3.5或更高版本):

显然,这将找到第一场比赛。如果要获取所有匹配项,可以执行以下操作:

var matchingRs = details.Where(d => d.L == searchText)
                        .Select(d => d.R);
看看关于实现IEquatable接口的内容。我想您会在那里找到所需的一切。

看看如何实现IEquatable接口。我想你会在那里找到你需要的一切。

怎么样:

IEnumerable<string> allR = Details.Where(d => Equals(d.L, otherString)).Select(d => d.R);
IEnumerable allR=Details.Where(d=>Equals(d.L,otherString))。选择(d=>d.R);
那么:

IEnumerable<string> allR = Details.Where(d => Equals(d.L, otherString)).Select(d => d.R);
IEnumerable allR=Details.Where(d=>Equals(d.L,otherString))。选择(d=>d.R);

for循环是实现这一点的基本方法

否则,请使用Linq:

var lString = SearchValue;
DetailList.Where(o => o.R == lString) //This will give you a list of all the Detail object where R == lString.

for循环是实现这一点的基本方法

否则,请使用Linq:

var lString = SearchValue;
DetailList.Where(o => o.R == lString) //This will give you a list of all the Detail object where R == lString.

如果L在你的例子中看起来是唯一的,那么最好在这里使用字典而不是列表

var myList = new Dictionary<string,string>();

如果L在你的例子中看起来是唯一的,那么最好在这里使用字典而不是列表

var myList = new Dictionary<string,string>();

您可以尝试将LINQ转换为对象:

string r = (from d in list where d.L.Equals(...) select d.R).FirstOrDefault();

您可以尝试将LINQ转换为对象:

string r = (from d in list where d.L.Equals(...) select d.R).FirstOrDefault();
string valueForL=“abc”;
列表详细信息=新列表();
字符串valueForR=(从详细信息中的d开始,其中d.L==valueForL选择d.R);
字符串值forl=“abc”;
列表详细信息=新列表();
字符串valueForR=(从详细信息中的d开始,其中d.L==valueForL选择d.R);

像这样获得所有匹配的左撇子:

IEnumerable<string> matchRightsToLeft(List<Detail> list, string left)
{
    return list.Where(l => l.left == left).Select(l => l.right);
}
IEnumerable matchRightsToLeft(列表,左字符串)
{
返回列表。其中(l=>l.left==left)。选择(l=>l.right);
}
还是第一场/唯一一场比赛

string matchRightToLeft(List<Detail> list, string left)
{
    return list.Where(l => l.left == left).FirstOrDefault(l => l.right);
}
字符串匹配右到左(列表,字符串左)
{
返回列表。其中(l=>l.left==left)。FirstOrDefault(l=>l.right);
}

像这样获得所有匹配的左撇子:

IEnumerable<string> matchRightsToLeft(List<Detail> list, string left)
{
    return list.Where(l => l.left == left).Select(l => l.right);
}
IEnumerable matchRightsToLeft(列表,左字符串)
{
返回列表。其中(l=>l.left==left)。选择(l=>l.right);
}
还是第一场/唯一一场比赛

string matchRightToLeft(List<Detail> list, string left)
{
    return list.Where(l => l.left == left).FirstOrDefault(l => l.right);
}
字符串匹配右到左(列表,字符串左)
{
返回列表。其中(l=>l.left==left)。FirstOrDefault(l=>l.right);
}

是否要在列表详细信息中搜索指定字符串?SortedDictionary无法工作的原因是什么?或者甚至是SortedDictionary。您有一个与Detail.L匹配的字符串,并且正在搜索一种方法来查找与此匹配的Detail.R的值?在这种情况下,值是否总是相同的?是否要在列表详细信息中搜索指定的字符串?SortedDictionary无法工作的原因是什么?或者甚至是SortedDictionary。您有一个与Detail.L匹配的字符串,并且正在搜索一种方法来查找与此匹配的Detail.R的值?在这种情况下,值是否总是相同的?如果您要多次查询它,并且不需要对任何其他内容进行排序,那么这是有意义的。但是,如果您需要顺序,并且不介意O(N)搜索(例如,您搜索的次数相对较少),那么在列表中就可以了。如果您要多次查询它,并且不需要对任何其他内容进行排序,这是有意义的。如果你需要排序,并且不介意O(N)搜索(例如,你搜索的次数相对较少),那么在列表中也可以;快如闪电:)乔恩·斯凯特;闪电般地快:)你的第二个是错误的,
FirstOrDefault
所使用的函数是谓词,而不是投影。我还建议遵循以下.NET命名约定:)谢谢Jon。我可以说我是在胡思乱想,但我知道你也可以这么说第二个是错误的,
FirstOrDefault
所使用的函数是谓词,而不是投影。我还建议遵循以下.NET命名约定:)谢谢Jon。我可以说我是在胡思乱想,但我知道你也可以这么说