c# - (C#) 枚举不会返回 int

标签 c# enums casting int enumerator

我正在编写一个需要查询多个数据库的应用程序,因此为了标准化我的连接字符串,我编写了以下枚举和方法:

class Program
{
    enum DBEnum { DB1, DB2, DB3, DB4, DB5 }

    static void Main(string[] args)
    {
        using (CacheConnection myConnection = new CacheConnection())
        {
            myConnection.ConnectionTimeout = 9999;
            myConnection.ConnectionString = DBSelect(DBEnum.DB1);
            myConnection.Open();
        }

    }

    public static string DBSelect(int i)
    {
        string connectionString = "";

        switch (i)
        {
            case 0:
                connectionString = *connection string*;
                break;
            case 1:
                connectionString = *connection string*;
                break;
            case 2:
                connectionString = *connection string*;
                break;
            case 3:
                connectionString = *connection string*;
                break;
            case 4:
                connectionString = *connection string*;
                break;
            default:
                break;
        }
        return connectionString;
    }

}

但问题是它没有为枚举定义分配数值。

根据 MSDN,除非将枚举强制转换为不同的数据类型,或者明确定义了定义,否则定义应该具有从 0 开始的 int 值。

然而 intellisense 让我提示的是:

 myConnection.ConnectionString = DBSelect(DBEnum.DB1); 

有无效的参数,如果我说类似的话

int i = DBEnum.DB1;

它会询问我是否缺少类型转换。

谢谢!

最佳答案

是赋数值,不是这个问题。您正在尝试将其用作 int 而不是枚举。没有从枚举到 int 的隐式转换。但是有一个明确的。只需“转换”即可

DBSelect((int)DBEnum.DB1);

但更好的方法是更改​​方法签名和实现

public static string DBSelect(DBEnume i)
{
    string connectionString = "";

    switch (i)
    {
        case DB1:
            connectionString = *connection string*;
            break;
        case DB2:
            connectionString = *connection string*;
            break;
        case DB3:
            connectionString = *connection string*;
            break;
        case DB4:
            connectionString = *connection string*;
            break;
        case DB5:
            connectionString = *connection string*;
            break;
        default:
            throw new InvalidOperation();
            break;
    }
    return connectionString;
}

然后你应该给枚举案例更好的名字。不限制您仅使用声明的值。基类型的任何值都可以转换为枚举。所以在你的情况下 (DBEnum)10012 是有效的。但是,当您提供信息而不是简单的序列时,枚举的效果非常好

DBEnum {
   UserDb,
   ArticleDb,
   RenderedCacheDb,
}

等等(当然我不知道你的数据库的名字所以我随便挑了一个)

关于c# - (C#) 枚举不会返回 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40875372/

相关文章:

C++ 风格的指针转换为整数

c# - 将程序集加载到新的应用程序域而不是 CurrentDomain

c# - 用于处理大数据量(100 万条记录等)的数据结构和技术

java - 相当于C#中Java的Optional.orElse

c# - 保存和解析枚举集合的最快方法?

C# 通用枚举转换为特定枚举

c# - 为什么 SQL float 与 C# float 不同

c# - Moq:如何检索模拟对象的 ID

c++ - 枚举变量的任意值

c# - 根据C#中传递的字符串值将对象转换为类型