我有一个自定义类型的通用列表
List<MyType> list = new List<MyType>();
我已经覆盖了MyType的.Equals,以便在比较字符串或MyType时它可以正常工作。我的问题是 - 如果List只包含MyType,有没有办法使用List.Contains(string)?
我意识到还有其他方法可以做到(比如在那里创建一个MyType对象而不是字符串),但有没有办法在不必扩展List的情况下进行呢?
答案 0 :(得分:8)
使用linq:
bool hasSugar = list.Any(i => i.Equals("sugar"));
答案 1 :(得分:3)
Haedrian,
Linq可以为你解决这个问题吗?在我的示例中,“MyType”是一个整数列表,但我能够对字符串值执行“包含”并返回已过滤的列表。
using System.Collections.Generic;
using System.Linq;
List<int> list = new List<int>();
List<int> sList = (from s in list
where s.ToString().Contains("1")
select s).ToList();
我希望这有帮助。你应该搜索Linq示例,它非常强大。
答案 2 :(得分:0)
如果已实现自定义类型的接口,则包含可与自定义IEquatable一起使用。您可以为特定类型实现常见的IEquatable接口,例如。它们都有唯一 int值,可以用作id。 在这种情况下,您可以使用IEquatable,并在实现正文中:
class MyType1 : IEquatable<int>
bool IEqutabale<int>.Equals(int other)
{
if (Id == other) return true;
return false;
}
然后你可以比较如下:
if (Type1List.Cast<IEquatable<int>>().Contains(type2Obj.Id)
{
//write your code here
}
您的另一个选择是在两种类型之间实现直接平等。 那就是:
class MyType1 : IEquatable<MyType2>
bool IEquatable<MyType2>.IEquals(MyType2 other)
{
//write equality logic here
}
然后你可以比较如下:
if(Type1List.Cast<IEquatable<MyType2>>().Contains(type2Object))
{
//write your code here
}