2

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

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);

仅仅是因为它们只是两个枚举器,并且在幕后将它们联系在一起吗?

干杯,亚历克斯

4

1 回答 1

3

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);
于 2015-10-12T00:08:50.257 回答