Convert.ToDbType()方法的逻辑

时间:2015-02-01 03:21:36

标签: c#

我在我的代码中编写了一些“数据类型嗅探”,它只是感觉不对,就像C#中有一些显而易见的功能,我忘了它应该允许我避免做这样的语句:

if(dbType == DbType.String)
    if(Convert.ToString(myVar) == Convert.ToString(myOtherVar))
        doSomethingUseful();
else if(dbType == DbType.Int32)
    if(Convert.ToInt32(myVar) == Convert.ToInt32(myOtherVar))
        doSomethingUseful();

(具体来说,我正在使用listBoxes,有时会有Int个值和其他String个值。)

似乎应该有一个Convert.ToDbType(myVar, unknownDbType)功能,或者某种方式在这里使用泛型。我正在寻找更好的道路。

2 个答案:

答案 0 :(得分:1)

我不认为.NET中的DbTypeType之间存在内置映射,但您可以自行编写:

private static readonly IDictionary<DbType,Type> DbTypeToType =
    new Dictionary<DbType,Type> {
    { DbType.String, typeof(string) }
,   { DbType.Int32, typeof(int) }
,   ... // Add more types as needed
};

现在您可以按如下方式进行比较:

var t = DbTypeToType[dbType];
if (Equals(Convert.ChangeType(myVar, t), Convert.ChangeType(myOtherVar, t))) {
    ...
}

此解决方案意味着myVarmyOtherVar都可以转换为dbType隐含的公共类型,并且您的计划感兴趣的所有DbType都会被涵盖在您的DbTypeToType表中。

答案 1 :(得分:0)

我建议使用作为Enum的DbType

if (dbType.GetType().ToString() == Enum.GetName(typeof(DbType), DbType.String))
            if (Convert.ToString(myVar) == Convert.ToString(myOtherVar))
                doSomethingUseful();
            else if (dbType.GetType().ToString() == Enum.GetName(typeof(DbType), DbType.Int32))
                if (Convert.ToInt32(myVar) == Convert.ToInt32(myOtherVar))
                    doSomethingUseful();