2013-05-10 66 views
-1

以下方法返回我们指定的命名空间中的所有System.Type类。 但是,我不想全部,我想只能检索我想要的类型。说我想要的类型INMIRegisterRepository。如何过滤下面的列表?请帮忙。使用lambda表达式的筛选器列表

public static List<Type> TypesInNameSpace(Assembly assembly, string nameSpace) 
{ 
    return assembly 
      .GetTypes() 
      .Where(O => string.Equals(O.Namespace, nameSpace, StringComparison.Ordinal)) 
      .ToList(); 
} 
+3

你知道这段代码的工作原理吗? – Jon 2013-05-10 09:19:22

回答

0
var Item = assembly 
       .GetTypes() 
       .FirstOrDefault(O => string.Equals(O.Namespace, 
             "INMIRegisterRepository", 
             StringComparison.Ordinal)); 

或者,如果你想访问返回的列表中,则:

var yourList = TypesInNameSpace(...... 

var Item = yourList.FirstOrDefault(O => string.Equals(O.Namespace, 
              "INMIRegisterRepository", 
              StringComparison.Ordinal)); 
+0

我想列表对象因为我们的方法期望列表对象。当我使用下面我得到异常 - 不能隐式转换类型'System.Type'到'System.Collections.Generic.List ':代码:列表 lockCaches = types.FirstOrDefault(O => string.Equals(O。命名空间, “INMIRegisterRepository”, StringComparison.Ordinal)); – mmssaann 2013-05-10 10:32:36

0

只需使用Assembly.GetType

assembly.GetType("INMIRegisterRepository"); 

使用Lambda表达式可以这样做:

assembly.GetTypes().Where(t => t.GetType() == typeof(INMIRegisterRepository)) 
+0

*程序集*不可枚举 – I4V 2013-05-10 20:55:00

+0

@ I4V谢谢,修正。 – CloudyMarble 2013-05-13 05:00:30