如何定义支持任意类型输入的类构造函数参数?
解决方案:让Token类支持任意类型的Value参数
方案一:使用object类型(直接支持任意类型)
在C#中,所有类型(包括值类型、引用类型)都直接或间接继承自object,因此将value的类型声明为object,就能在实例化时接收任意类型的参数。
修改后的完整代码:
class Token { public string Name; // 已知类型 public object Value; // 运行时确定类型 public Token(string name, object value) { Name = name; Value = value; } }
使用示例
// 可传入字符串、整数、布尔值等任意类型 var stringToken = new Token("StringToken", "Hello World"); var intToken = new Token("IntToken", 123); var boolToken = new Token("BoolToken", true);
注意事项
从Value取值时需要强制类型转换,若类型不匹配会抛出InvalidCastException,例如:
// 会抛出异常,因为stringToken的Value是字符串类型 var num = (int)stringToken.Value;
方案二:泛型类(类型安全的替代方案)
如果希望在编译阶段就确定Value的类型,避免强制转换风险,可以用泛型定义Token类:
class Token<T> { public string Name; public T Value; public Token(string name, T value) { Name = name; Value = value; } }
使用示例
// 实例化时指定类型,编译时会自动校验类型合法性 var stringToken = new Token<string>("StringToken", "Hello World"); var intToken = new Token<int>("IntToken", 123);
优点
- 编译阶段即可发现类型不匹配问题,避免运行时异常
- 取值无需强制转换,代码更简洁安全
内容的提问来源于stack exchange,提问作者Arin Bryan
相关产品推荐
相关产品推荐

