C# 是否创建列表<;T>;包含一个属性T?
我得到了以下清单:C# 是否创建列表<;T>;包含一个属性T?,c#,list,contains,C#,List,Contains,我得到了以下清单: private static List<Type> _AbstractTypes = new List<Type>(); 我绝对知道我以前的代码根本不可编译,但那正是我要找的东西! 提前感谢您的帮助您可以使用Linq,但我们这里只讨论无循环构造,引擎盖下的代码必须执行循环,如果您想做得更好,可以使用哈希集 Linq代码可以如下所示: _AbstractTypes.Any(t => t.FullName == myString); var ty
private static List<Type> _AbstractTypes = new List<Type>();
我绝对知道我以前的代码根本不可编译,但那正是我要找的东西!
提前感谢您的帮助您可以使用Linq,但我们这里只讨论无循环构造,引擎盖下的代码必须执行循环,如果您想做得更好,可以使用
哈希集
Linq代码可以如下所示:
_AbstractTypes.Any(t => t.FullName == myString);
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
_AbstractTypes.Any(t=>t.FullName.Contains(myString))
HashSet
代码可能如下所示:
_AbstractTypes.Any(t => t.FullName == myString);
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
_AbstractTypes.Any(t=>t.FullName.Contains(myString))
var types=newhashset();
添加(typeof(int))//用类型填充它
类型。添加(typeof(double));
//通过从字符串名获取类型进行检查,当然也可以缓存这些类型
WriteLine(“Contains int:+types.Contains(Type.GetType(intName)))//真的
WriteLine(“Contains float:+types.Contains(Type.GetType(floatName)))//假的
如果列表包含元素,您可以执行类似于\u AbstractTypes.First().GetType()
的操作此代码:
bool result = _AbstractTypes.Any(t=>t.FullName == myString);
我应该做这项工作
它将针对所有类型测试谓词,直到满足一个(返回true)或无(返回false) 您可能想要这样的东西:
_AbstractTypes.Any(t => t.FullName == myString);
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
_AbstractTypes.Any(t=>t.FullName.Contains(myString))
你无法避免循环 您可以(通过幕后循环)执行以下操作:
我认为您可以通过这种方式确定列表中是否包含类型:
if (_AbstractTypes.Contains(typeof(string)))
{
// Do Something
}
所以你不想使用循环?或者你只是想帮助实现一个循环?因为我认为使用foreach循环可以得到期望的结果;是完美的:)通过“无循环”,我的意思是不是有一些老式的代码,你的答案就是我要找的;)谢谢@GuillaumeSlashy Linq看起来既现代又酷,所以它应该能让你看起来不那么老派:-)是的,这正是我想要的:>