我有这个清单:
private static List<Type> _AbstractTypes = new List<Type>();
以后在我的项目中,我得到了一个与Type.FullName对应的string
。
问题是我想检查我的字符串是否包含在我的列表中,但我无法避免可用的循环:(
我正在寻找类似的东西:
_AbstractTypes.FullName.Contains(myString)
我完全清楚我之前的代码根本不可编译,但这就是我要找的东西! 在此先感谢您的任何帮助
答案 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
}