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