Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否创建列表<;T>;包含一个属性T?_C#_List_Contains - Fatal编程技术网

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看起来既现代又酷,所以它应该能让你看起来不那么老派:-)是的,这正是我想要的:>