通用通用扩展方法(原文如此!)

发布于 2024-12-10 05:23:05 字数 330 浏览 1 评论 0原文

是否可以向泛型类添加独立于该类的实例泛型类型的扩展方法?

我想编写一个扩展方法来处理 Nullable 值。到目前为止,该方法如下所示:

public static object GetVerifiedValue(this Nullable<> obj)
{
    return obj.HasValue ? obj.Value : DBNull.Value;
}

但编译器不接受 Nullable 类型。

我有什么办法可以做到这一点吗?

注意:我使用的是 C# 3.0、.NET 3.5。

Is it possible to add an extension method to a generic class that is independent of that class' instance generic type?

I want to write a extension method for handling Nullable values. So far, the method looks like this:

public static object GetVerifiedValue(this Nullable<> obj)
{
    return obj.HasValue ? obj.Value : DBNull.Value;
}

But the compiler doesn't accept the Nullable<> type.

Is there any way I can do this?

Note: I'm using C# 3.0, .NET 3.5.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

涙—继续流 2024-12-17 05:23:05

只需将其设为通用方法即可:

public static object GetVerifiedValue<T>(this Nullable<T> obj)
    where T : struct
{
    return obj.HasValue ? obj.Value : DBNull.Value;
}

调用代码在调用时可以使用类型推断:

int? x = 10;
object o = x.GetVerifiedValue();

编辑:另一种选择是使用可空类型的装箱行为:

public static object GetVerifiedValue(object obj)
{
    return obj ?? DBNull.Value;
}

当然,这并不能验证您是否正在尝试传递以下表达式:可为空的值类型...

Just make it a generic method:

public static object GetVerifiedValue<T>(this Nullable<T> obj)
    where T : struct
{
    return obj.HasValue ? obj.Value : DBNull.Value;
}

The calling code can use type inference when calling it:

int? x = 10;
object o = x.GetVerifiedValue();

EDIT: Another option is to use the boxing behaviour of nullable types:

public static object GetVerifiedValue(object obj)
{
    return obj ?? DBNull.Value;
}

Of course that doesn't verify that you're trying to pass in an expression of a nullable value type...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文