c# - 将引用基元转换为泛型类型

标签 c# object methods parameters type-conversion

我知道标题令人困惑,所以我会尽力解释得更好。这基本上是我想要在方法中执行的操作:

if (record["id"] != DBNull.Value) _id = Convert.ToInt32(record["id"]);
else id = -1;

我希望它适用于我存储在数据库中的多种类型。 (因此,如果它是一个字符串,它会将其转换为字符串,依此类推)。任何方式做到这一点都可以,我正在尝试用一种方法来做到这一点。我已经了解了这么多,但 C# 不会自动将 int 转换为对象。想法?

    private void Load(ref object var, object obj, object def)
    {
        if (var is int)
        {
            var = Convert.ToInt32(obj);
        }
    }

   int _id;
   Load(ref _id, record["id"], -1);

为了澄清一下,我的错误是“无法从 ref int 转换为 ref object”。 感谢您的帮助。

最佳答案

您可以使用Convert.ChangeType()并使你的方法通用:

private void Load<T, U>(out T value, U obj, T defaultValue)
{
    if (obj is DBNull)
       value = defaultValue;
    else
        value = (T)Convert.ChangeType(obj, typeof(T));
}

现在你可以像这样使用它(简化的示例,不确定你需要 def 的用途):

int id;
object foo = 42;
Load(out id, foo, 1);

关于c# - 将引用基元转换为泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9165076/

相关文章:

javascript - Canvas 游戏中的Js对象Uncaught TypeError : Cannot read property 'x' of undefined

python - Pandas 存储 1000 个数据框对象

Java Return 不退出方法(循环)

c# - 从字符串调用动态方法

c# - 获取表单帖子的名称和值

c# - 简单更新工具

c# - 如何从 List<String[]> 创建一个 csv 文件

java - 使用 Iterator 从 HashMap 返回对象

c# - 获取当前方法名称

c# - RavenDB - 与 Sql Server 数据库同步