(C#) 枚举不会 return int
(C#) Enum won't return int
我正在编写一个需要查询多个数据库的应用程序,因此为了标准化我的连接字符串,我编写了以下枚举和方法:
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
DBSelect((int)DBEnum.DB1);
请参阅上一个关于将枚举转换为整数的问题。
Get int value from enum
编辑:您还应该考虑将连接字符串保存在配置管理器中。请参阅这篇 MSDN 文章,了解如何执行此操作
是赋数值,不是这个问题。您正在尝试将其用作 int 而不是枚举。没有从枚举到 int 的隐式转换。但是有一个明确的。就"cast"吧
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,
}
等等(当然我不知道你的数据库的名字所以我随便挑了一个)
它会询问您是否 "missing a cast",因为 enum
和 int
是不同的数据类型。正如其他人所说,您需要对其进行类型转换:
DBSelect((int)DBEnum.DB1);
否则你会一直得到 "Cannot explicitly convert enum
to int32
"
我正在编写一个需要查询多个数据库的应用程序,因此为了标准化我的连接字符串,我编写了以下枚举和方法:
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;
它问我是否缺少演员表。
谢谢!
只需像
一样将枚举转换为 intDBSelect((int)DBEnum.DB1);
请参阅上一个关于将枚举转换为整数的问题。 Get int value from enum
编辑:您还应该考虑将连接字符串保存在配置管理器中。请参阅这篇 MSDN 文章,了解如何执行此操作
是赋数值,不是这个问题。您正在尝试将其用作 int 而不是枚举。没有从枚举到 int 的隐式转换。但是有一个明确的。就"cast"吧
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,
}
等等(当然我不知道你的数据库的名字所以我随便挑了一个)
它会询问您是否 "missing a cast",因为 enum
和 int
是不同的数据类型。正如其他人所说,您需要对其进行类型转换:
DBSelect((int)DBEnum.DB1);
否则你会一直得到 "Cannot explicitly convert enum
to int32
"