我把它归结为一个简单的例子:
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);
仅仅是因为他们只是两个普查员,并且在幕后将他们联系在一起吗?
欢呼声, 亚历
答案 0 :(得分:2)
SqlDbType和DbType是两个完全独立的枚举。就编译器而言,它们与enum Colors
和enum DayOfTheWeek
兼容。
你需要执行强制转换来告诉编译器"我知道这些是不同的类型,但我希望你无论如何都把它当作另一个。"
enum关键字用于声明一个枚举,一个不同类型,它由一组名为常量的枚举器列表组成。
来源:MSDN(强调我的)
请注意,MSDN没有记录SqlDbType或DbType的任何特定基础值,因此即使SqlDbType.BigInt和DbType.BigInt今天具有相同的基础值,也没有文件证明它会保持这种方式,或者说这就是每个.NET实现的方式。
但MSDN确实做出以下保证
设置命令参数时,链接SqlDbType和DbType。因此,设置DbType会将SqlDbType更改为支持SqlDbType。
处理代码的最佳方式是
DoStuff(DbType.Int);