我正在为 .NET 构建一个 HTTP-API 包装器,它有一堆方法可以在对象中设置数据,然后将数据序列化并将其发送到我的服务器。允许使用 6 种数据类型:
- 细绳
- 整数
- 长
- 漂浮
- 双倍的
- 约会时间
我的数据属性使用泛型:
SetAttribute<T>(string key, T value)
所以只有一种通用的方法来设置数据。由于我无法将数据类型限制为提到的 6 个,因此我使用运行时检查并在使用错误数据类型时抛出异常。
现在解决我的问题:我有两个版本的 SetAttribute,一个接受单个值(T 类型),另一个接受多个值(IEnumerable<T> 类型)。问题是当程序员使用这个包装器并且没有指定类型参数时,运行时会猜测使用哪个方法,例如:
SetAttribute("testkey","thing,anotherthing,athirdthing".Split(','))
这默认为单值方法,T 是 String[],这当然会使我的方法抛出异常,因为 String[] 不是有效类型。如果您指定:
SetAttribute<string>("testkey","thing,anotherThing,aThirdThing".Split(','))
运行时选择正确的方法(多值)并且没有异常被转换,因为 T 是字符串。
我的问题:如何标记我的方法,以便类型参数是强制性的并且必须明确定义?还是我必须在运行时检测到这一点并自己重定向到多方法?