gpt4 book ai didi

c# - 如何实现可以返回类或可空结构的通用集合查找方法?

转载 作者:太空狗 更新时间:2023-10-29 21:13:51 28 4
gpt4 key购买 nike

我想要一个用于异构集合的类型化查找辅助函数:它应该返回一个结构或类,如果找不到该项目则返回 null。下面是一个使用普通集合查找的示例,但它可以是数据库调用或其他任何内容。

有没有办法用一个方法签名来实现这个?

    public T GetClass<T>(string key)  where T : class
{
object o;
if (Contents.TryGetValue(key, out o))
{
return o as T;
}
return null;
}

public T? GetStruct<T>(string key) where T : struct
{
object o;
if (Contents.TryGetValue(key, out o))
{
if (o is T)
{
return (T?) o;
}
}
return null;
}

我已经尝试过的:

  • 我明白通用限制不能用来消除过载的歧义。所以我不能简单地给这两个方法起相同的名字。
  • 返回 (Default) T不是一个选项,因为 0 是一个有效的 int 值。
  • 我试过用<int ?>打电话作为类型,但如前所述,Nullable<T>不是引用类型。

有什么方法可以表明我要返回一个装箱的 int 吗?

最佳答案

Is there any way to achieve this with a single method signature?

有一个 horrible (真的很可怕)使用可选参数的方式来做到这一点,以便调用代码在两种情况下看起来都一样。虽然很恶心。

选项:

  • 返回 Tuple<T, bool>而不是使用无效
  • 使用out参数(如 int.TryParse 等)
  • 使用不同的方法名

请注意,通过单独发出缺少值的信号,您可以生成 null一个有效的“发现”结果,有时很有用。或者您可能只想保证它永远不会被退回。

如果您真的想使用无效性,我会选择最后一个选项。我相信它无论如何都会让你的代码更清晰。国际海事组织,重载应该只在方法完全使用不同参数表达相同的事情时使用 - 而返回 Nullable<T>作为一种情况下的返回类型和 T因为另一种情况下的返回类型不能真正以这种方式看到。

关于c# - 如何实现可以返回类或可空结构的通用集合查找方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10420364/

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