繁体   English   中英

C#方法返回一个类型

[英]C# method to return a type

我有几个由一些ID标识的类(每个类都是唯一的整数)。 接下来我需要一个以整数(ID)作为参数并返回相应类类型的方法。 到目前为止,我已经到过这个:

public static Type GetById(int id)
{
    switch (id)
    {
        case 1: return (new ClassA()).GetType();
        case 2: return (new ClassB()).GetType();
        case 3: return (new ClassC()).GetType();
        // ... and so on
    }
}

现在似乎它可以工作,但由于某种原因我不喜欢我必须实例化类来获取它的类型。 这会导致任何问题吗?

我找到的另一个解决方案是使用Type.GetType( classNameAsString )方法,但我想这可能会导致一些运行时错误或错误,如果类名更改(即我更改类的名称,但忘记更新GetById方法)。

有没有更好的方法来做到这一点?

请改用typeof运算符

public static Type GetById(int id)
{
    switch (id)
    {
        case 1: return typeof(ClassA);
        case 2: return typeof(ClassB);
        case 3: return typeof(ClassC);
        // ... and so on
    }
}

作为旁注,我会严肃质疑这整个设计 - 将类型映射到整数感觉很奇怪。

你为什么不宣布一本字典

  private static Dictionary<int, Type> types = new Dictionary<int, Type>() {
    {1, typeof(ClassA)},
    {2, typeof(ClassB)},
    {3, typeof(ClassC)},
    ... and so on
  };

  public static Type GetById(int id) {
    Type result = null;

    if (types.TryGetValue(id, out result))
      return result;

    return null; // or throw exception
  }

另一种方法是创建一个enum

public enum ClassType
{
    ClassA = 1,
    ClassB = 2,
    ClassC = 3
}

然后更改您的方法以接受此enum并返回类型:

public static Type GetById(ClassType id)
{
    //Will return null if the Type is not found, 
    //Add true as a second parameter to throw if not found
    return Type.GetType(id.ToString());
}

这样做会从代码中删除幻数,但只有在类名与枚举选项匹配时才会起作用。 这将使您的代码显着缩小,但正如其他人指出的那样,您应该真正质疑您的应用程序设计,因为这感觉不太对。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM