2011-06-12 78 views
3

例如,我有一个叫做Clothing的类,它继承自Product的抽象类。C# - 如何根据字符串返回一个类型

public class Clothing : Product 
{ 
    public bool IsInSeason {get; set;} 
    public string Material {get; set; } 
    public Decimal IsFeatured { get; set; } 
} 

编辑: 在一个功能,我将如何能够通过字符串“服装”,并有一个typeof运算类返回?

ReturnTypeOfClassBasedOffOfString(string class) 
{ 
    // ... 
} 
+0

是你的问题解决了? – 2011-06-13 16:51:42

回答

5

使用Type.GetType(string)

注意某个类名是不够的。有时您需要提供AssemblyQualifiedName

“如果类型位于当前正在执行的程序集或Mscorlib.dll中,则提供通过其名称空间限定的类型名称就足够了”。

+0

在我的情况下,我怎么能提供AssemblyQualifiedName Type.GetType? AssemblyQualifiedName需要知道类型:O – contactmatt 2011-06-16 04:40:37

1

你可以使用Type.GetType,但是:你想实现什么?我敢打赌你需要更简单的东西。为什么我们需要Clothing课程?

顺便说一句:ReturnTypeOfClassBasedOffOfString(string class)不会编译。您需要ReturnTypeOfClassBasedOffOfString(string classname)ReturnTypeOfClassBasedOffOfString(string @class)

0
static Type ReturnTypeOfClassBasedOffOfString(string className) 
{ 
    foreach (Assembly a in AppDomain.Current.GetAssemblies()) 
    { 
    foreach (Type t in a.GetTypes()) 
    { 
     if (t.Name == className) // Ignore namespace 
     return t; 
    } 
    } 

    return null; 
} 
+0

我认为这对于那些不想担心命名空间的人来说是一个很好的解决方案。但就性能而言,提供大会限定名称会更好。 – 2011-06-12 14:50:05

+0

或者如果你知道程序集: 'Assembly assembly = Assembly.LoadFrom(“assemblyname.dll”); assem.GetTypes()。Single(t => t.Name == className);' 另外,小心如何缩写“程序集”... :) – tandrewnichols 2012-11-18 22:52:28

0

您可以使用

Type.GetType("MyApplication.Product", true) 

为了这个目的,但你必须包括命名空间( “MyApplication的”,例如)。

0

,如果你想获得键入:

Type.GetType 

是enough.and,如果你想使用它的弦名字创建实例,你应该使用

Activator.CreateInstance 

好运

相关问题