gpt4 book ai didi

c# - 了解 C# 泛型和 Nullable 值类型。返回 null 或 nullable

转载 作者:太空狗 更新时间:2023-10-29 18:12:17 26 4
gpt4 key购买 nike

假设我有以下类(class):

public class GenericClass<T>
{
public T Find()
{
//return T if found otherwise null or Nullable<T>
}
}

我想在某个地方使用 T 来专门化我的类(class)用class , 其他时候是 struct .我正面临这个issue : 我无法返回 Nullable<T>如果T type 不限于 struct .

我想提供我的 Find 的实现如果 T 有效的方法专门用于 classstruct .万一Find失败,我想返回 null如果T否则是一类 Nullable<T> .

不使用反射是否可能?如果是怎么办?

最佳答案

您可以返回default(T) .

对于一个类,这将是 null .对于任何 Nullable<T> , 这将是一个 Nullable<T>没有值(实际上是 null )。

话虽如此,如果您将其与 struct 一起使用而不是 Nullable<T>作为类型,default(T)将是结构的默认值。


如果你想让它对任何类或结构统一工作,你可能需要返回两个值 - 你可以在这里使用框架作为灵感,并有一个 TryXXX 方法,即:

public bool TryFind(out T)

然后您可以使用 default(T)当找不到该值时,返回 false。这避免了对可空类型的需要。你也可以写这个返回一个 Tuple<bool, T>或类似的,如果你想避免 out 参数,即:

public Tuple<bool, T> Find()

最后一个选项可能是让您的类成为非泛型类,然后使用一对泛型方法:

class YourClass // Non generic
{
public T FindReference<T>() where T : class
{
// ...
return null;
}

public Nullable<T> FindValue<T>() where T : struct
{
// ...
return default(T);
}
}

请注意,您需要不同的名称,因为您不能拥有完全基于返回类型的重载方法。

关于c# - 了解 C# 泛型和 Nullable 值类型。返回 null 或 nullable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13143488/

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