C#为什么不';是否存在从SqlDbType到DbType的隐式转换?
我把它归结为一个简单的例子:C#为什么不';是否存在从SqlDbType到DbType的隐式转换?,c#,system.data,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) {
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);
这仅仅是因为他们只是两个统计员,在幕后有某种东西将他们联系在一起吗
干杯,
AlexSqlDbType和DbType是两个完全独立的枚举。就编译器所知,它们与
enum颜色
和enum dayofweek
一样兼容
您需要执行强制转换来告诉编译器“我知道这些是不同的类型,但我希望您将其中一种视为另一种。”
enum关键字用于声明枚举,这是一种不同类型的,由一组名为枚举器列表的命名常量组成
资料来源:(强调矿山)
请注意,MSDN没有记录SqlDbType或DbType的任何特定基础值,因此即使SqlDbType.BigInt和DbType.BigInt今天具有相同的基础值,也没有记录在案的保证它将保持这种方式,或者在每个.NET实现中都是这样
但是,MSDN提供以下保证
设置命令参数时,SqlDbType和DbType是链接的。因此,设置DbType会将SqlDbType更改为支持的SqlDbType
处理代码的最佳方法是
DoStuff(DbType.Int);
当您执行
DoStuff(SqlDbType.Image)
或DoStuff(SqlDbType.Structured)
时,您的程序应该如何运行?这里的另一个问题已标记为已回答,谢谢:如果我只是将DBType用作瞬态,并且源代码是(DBType)SqlDbType.Int,而目标接收到DBType,但随后又返回到SqlDbType,该怎么办?是否保证始终具有相同的值?如果您强制转换(SqlDbType)(DbType)SqlDbType.Int,则无法明确保证您将获得与开始时相同的SqlDbType。实际上,至少对于SqlDbType和DbType通用的值,您可能会这样做,但框架并不能保证这一点。