gpt4 book ai didi

c# - 强制泛型类型参数

转载 作者:太空宇宙 更新时间:2023-11-03 21:55:14 25 4
gpt4 key购买 nike

我正在为 .NET 构建一个 HTTP-API 包装器,它有很多方法可以在对象中设置数据,然后序列化数据并将其发送到我的服务器。允许使用 6 种数据类型:

  • 字符串
  • 内部
  • 漂浮
  • 日期时间

我的数据属性使用泛型:

SetAttribute<T>(string key, T value)

所以只有一种通用的方法来设置数据。由于我不能将数据类型限制为提到的 6 种,我使用运行时检查并在使用错误的数据类型时抛出异常。

现在解决我的问题:我有两个版本的 SetAttribute,一个接受单个值(T 类型),另一个接受多个值(IEnumerable 类型)。问题是当程序员使用这个包装器并且没有指定类型参数时,运行时会猜测使用哪个方法,例如:

SetAttribute("testkey","thing,anotherthing,athirdthing".Split(','))

这默认为单值方法,T 是 String[],这当然会使我的方法抛出异常,因为 String[] 不是有效类型。如果您指定:

SetAttribute<string>("testkey","thing,anotherThing,aThirdThing".Split(','))

运行时选择正确的方法(多值)并且不会抛出异常,因为 T 是字符串。

我的问题:如何标记我的方法,以便类型参数是必需的并且必须显式定义?还是我必须在运行时检测到它并自己重定向到多方法?

最佳答案

好的,这最初是上面的评论,因为它不一定能回答您原来的问题,但会建议另一种方法;

我想说在这种情况下使用公共(public)通用 SetAttribute 不一定是个好主意。

由于类型如此受限,您可能应该只编写重载并将错误从运行时移至编译时。它还允许您使用 IEnumerable<string>等等,另外 6 个过载并完全消除你遇到的问题。

您始终可以使用私有(private)泛型实现 SetAttribute,并在每次重载时调用它,这将消除一些重复。

它还将或多或少地消除运行时检查的需要,因为类型已经受到编译器的限制。

关于c# - 强制泛型类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12580994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com