c# - 类型转换盒装字节

标签 c# casting

我正在尝试编写一个扩展方法,给定一个值,它将返回

  • 值本身,如果它不同于 DBNull.Value
  • value 类型的默认值

是的,这不是最清楚的解释,也许一些代码会让我想要完成的事情变得显而易见。

public static T GetValueOrDefault<T>(this object value) {
    if (value == DBNull.Value)
        return default(T);
    else
        return (T)value;
}

只要value的装箱类型与T相同,这个方法就可以正常工作。

当类型不同时,真正的乐趣就开始了,例如装箱的值是 byteTint

是否有一种优雅的方式来完成这项工作?

手动进行一些类型检查以首先从例如objectbyte,再从byteT,当然不行。

编辑

提议的解决方案也应该适用于枚举,而不仅仅是“标准”类型。

最佳答案

使用与数据库值完全匹配的类型参数调用您的方法,然后将其转换为您真正想要的,例如

int result = (int) row["NullableByteColumn"].GetValueOrDefault<byte>();

我认为这是合理的,因为代码清楚地将此处起作用的两个不同概念分开:

  • 将数据库值读入正确的等效 .NET 数据类型。
  • 将数据库访问层类型映射到所需的业务逻辑层类型。

如果所需的数据类型是从 int 中进一步移除的东西并且需要更复杂的转换,例如一个枚举、一个字符串或日期的偏移量。

关于c# - 类型转换盒装字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8166414/

相关文章:

c# - 为什么我的返回值不对?

c# - 从 char[] 转换后从字符串中修剪/空值(在 C# 中)

c# - 自定义号码选择器?

c# - 将元素添加到 IEnumerable<IPublishedContent>

generics - 如何在 Rust 中转换泛型原始类型?

c# - object[] as SomeClass[] 始终为 null

c++ - 通过更改类型在函数之间传递模板对象

c# - 如何提高 .Net 中的 JSON 反序列化速度? (JSON.net 还是其他?)

c# - 如何获得构建/重建实时输出

c# - Selenium 测试用于 Azure Active Directory 登录的 Edge webdriver 时元素被遮挡 登录您的帐户页面