C# 在同一命名空间中有两个类&;项目是否也在同一执行程序集中?

C# 在同一命名空间中有两个类&;项目是否也在同一执行程序集中?,c#,asp.net,.net,C#,Asp.net,.net,我在标题中提出这个问题是因为这样做有效: FooBar fooBar = new FooBar(); 它在FooBar等中命中构造函数,但返回null: Type type = Type.GetType("FooBar"); FooBar和我试图从中执行此操作的类都位于同一名称空间、同一项目中,等等 我已经看过这条线了: 根据这个公认的答案(以及其他一些答案),这“仅当在mscorlib.dll或当前执行的程序集中找到类型时才起作用。” 如果这两个类位于同一名称空间和同一项目(即:same

我在标题中提出这个问题是因为这样做有效:

FooBar fooBar = new FooBar();
它在FooBar等中命中构造函数,但返回null:

Type type = Type.GetType("FooBar");
FooBar
和我试图从中执行此操作的类都位于同一名称空间、同一项目中,等等

我已经看过这条线了:

根据这个公认的答案(以及其他一些答案),这“仅当在mscorlib.dll或当前执行的程序集中找到类型时才起作用。”

如果这两个类位于同一名称空间和同一项目(即:same.dll)中,这会不会使执行程序集不相同


我做错了什么

即使它位于相同的程序集和命名空间中,您仍然需要提供命名空间。这只是可以跳过的程序集限定名

Type type = Type.GetType("YourNamespace.FooBar");

即使它位于相同的程序集和命名空间中,您仍然需要提供命名空间。这只是可以跳过的程序集限定名

Type type = Type.GetType("YourNamespace.FooBar");
从:

类型名称。要获取的类型的程序集限定名。请参阅AssemblyQualifiedName。如果类型位于当前执行的程序集中或Mscorlib.dll中,则提供由其命名空间限定的类型名就足够了

所以您仍然需要提供名称空间,例如

var type = Type.GetType("MyNamespace.FooBar");
如果出于某种原因确实不想提供名称空间,作为替代方案,您也可以轻松地执行以下操作:

var type = System.Reflection.Assembly.GetExecutingAssembly()
    .GetTypes()
    .Where(a => a.Name == "FooBar");
从:

类型名称。要获取的类型的程序集限定名。请参阅AssemblyQualifiedName。如果类型位于当前执行的程序集中或Mscorlib.dll中,则提供由其命名空间限定的类型名就足够了

所以您仍然需要提供名称空间,例如

var type = Type.GetType("MyNamespace.FooBar");
如果出于某种原因确实不想提供名称空间,作为替代方案,您也可以轻松地执行以下操作:

var type = System.Reflection.Assembly.GetExecutingAssembly()
    .GetTypes()
    .Where(a => a.Name == "FooBar");

我怀疑您得到“NULL”的原因不是因为它们在不同的执行程序集中(它们看起来不是),而是因为CLR编译代码的顺序(“及时”)。由于GetType(“FooBar”)不会实例化未编译的类,因此运行时根本不知道它存在,为什么使用
Type.GetType
?为什么不使用
typeof(FooBar)
?@mason-在工厂模式中执行此操作,其中要实例化的类的名称作为stringWhy传入?看来这也没必要。为什么不使用泛型呢?该应用程序是一个非常小、轻量级的windows服务应用程序。它有十几个实现给定接口的可能类。直到运行时,我们才知道要实例化哪个类,而我们知道要实例化的类的方式是从反序列化的json字符串中提取它的名称。我愿意接受更好的想法,但是,类的名称以字符串的形式出现在这个应用程序中。我怀疑你得到“NULL”的原因不是因为它们在不同的执行程序集中(它们看起来不是),而是因为CLR编译你的代码的顺序(“及时”)。由于GetType(“FooBar”)不会实例化未编译的类,因此运行时根本不知道它存在,为什么使用
Type.GetType
?为什么不使用
typeof(FooBar)
?@mason-在工厂模式中执行此操作,其中要实例化的类的名称作为stringWhy传入?看来这也没必要。为什么不使用泛型呢?该应用程序是一个非常小、轻量级的windows服务应用程序。它有十几个实现给定接口的可能类。直到运行时,我们才知道要实例化哪个类,而我们知道要实例化的类的方式是从反序列化的json字符串中提取它的名称。我愿意接受更好的想法,但是,类的名称以字符串的形式出现在这个应用程序中。如果在多个名称空间中有相同的类名,这可能不好。如果在多个名称空间中有相同的类名,这可能不好。