List <t>是否包含T?</t>的属性

时间:2011-12-07 08:51:58

标签: c# list contains

我有这个清单:

private static List<Type> _AbstractTypes = new List<Type>();

以后在我的项目中,我得到了一个与Type.FullName对应的string。 问题是我想检查我的字符串是否包含在我的列表中,但我无法避免可用的循环:( 我正在寻找类似的东西:

_AbstractTypes.FullName.Contains(myString)

我完全清楚我之前的代码根本不可编译,但这就是我要找的东西! 在此先感谢您的任何帮助

6 个答案:

答案 0 :(得分:6)

你可以使用Linq,但我们只讨论无环构造,引擎盖下的代码必须循环,如果你想做得更好,你可以使用HashSet<T>

Linq代码可能如下所示:

_AbstractTypes.Any(t => t.FullName == myString);

HashSet<Type>代码可能如下所示:

var types = new HashSet<Type>();
types.Add(typeof(int)); //Fill it with types
types.Add(typeof(double));

//Check by getting types from their string name, you could of course also cache those types
Console.WriteLine("Contains int: " + types.Contains(Type.GetType(intName))); //True
Console.WriteLine("Contains float: " + types.Contains(Type.GetType(floatName))); //False

答案 1 :(得分:1)

此代码:

bool result = _AbstractTypes.Any(t=>t.FullName == myString);

应该做的工作。

它将针对所有类型测试谓词,直到满足一个(返回true)或none(返回false)。

答案 2 :(得分:0)

如果列表包含元素,您可以执行_AbstractTypes.First().GetType()

之类的操作

答案 3 :(得分:0)

你可能想要这样的东西:

_AbstractTypes.Any(t=>t.FullName.Contains(myString))

答案 4 :(得分:0)

你无法避免循环。

你可以做(​​在幕后循环):

bool check = _AbstractTypes.Any(item => item.FullName == myString);

答案 5 :(得分:0)

我认为您可以通过以下方式查明列表中是否包含类型:

if (_AbstractTypes.Contains(typeof(string)))
{
    // Do Something
}