[英]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.