C#为什么没有从SqlDbType到DbType的隐式转换?

时间:2015-10-12 00:05:01

标签: c# system.data

我把它归结为一个简单的例子:

using System;
using System.Data;


class MyProgram
{
    void DoStuff(DbType t)
    {

    }

    public MyProgram()
    {
        DoStuff(SqlDbType.Int);
    }
}

class Program
{
    public static void Main(string[] args)
    {
        MyProgram p = new MyProgram();
    }
}

为什么我必须这样称呼它?

DoStuff((DbType)SqlDbType.Int);

仅仅是因为他们只是两个普查员,并且在幕后将他们联系在一起吗?

欢呼声, 亚历

1 个答案:

答案 0 :(得分:2)

SqlDbType和DbType是两个完全独立的枚举。就编译器而言,它们与enum Colorsenum DayOfTheWeek兼容。

你需要执行强制转换来告诉编译器"我知道这些是不同的类型,但我希望你无论如何都把它当作另一个。"

  

enum关键字用于声明一个枚举,一个不同类型,它由一组名为常量的枚举器列表组成。

来源:MSDN(强调我的)

请注意,MSDN没有记录SqlDbType或DbType的任何特定基础值,因此即使SqlDbType.BigInt和DbType.BigInt今天具有相同的基础值,也没有文件证明它会保持这种方式,或者说这就是每个.NET实现的方式。

但MSDN确实做出以下保证

  

设置命令参数时,链接SqlDbType和DbType。因此,设置DbType会将SqlDbType更改为支持SqlDbType。

处理代码的最佳方式是

DoStuff(DbType.Int);