这是两个代码:
if (Enum.Parse(typeof(SomeEnum),data["rowName"].ToString()).Equals(SomeEnum.EnumValue))
或
if (data["rowName"].ToString().Equals(SomeEnum.EnumValue.ToString()))
哪种方法更好,更有效?
答案 0 :(得分:0)
您可以直接转换为枚举。即:
if ((SomeEnum)data["rowName"] == SomeEnum.EnumValue)
您不想转换为字符串。
注意:通常,当从数据库中提取数据时,它会被正确过滤。
编辑:不太可能将枚举值作为字符串保留在数据库中。期望的类型是整数。如果数据库中存在(例如整数)值而不是枚举值,则不会导致异常。这是使用罗斯文(Northwind)示例数据库的演示(请注意,发件人联邦快递未在Enum值中定义):
void Main()
{
DataTable tbl = new DataTable();
using (SqlConnection con = new SqlConnection(@"server=.\SQLEXpress;Database=Northwind;Trusted_Connection=yes"))
{
con.Open();
var reader = new SqlCommand("select * from Orders",con).ExecuteReader();
while (reader.Read())
{
if ((Shipper)reader["ShipVia"] != Shipper.SpeedyExpress)
{
Console.WriteLine($@"{(int)reader["OrderId"]}, {(Shipper)reader["ShipVia"]}");
}
}
}
}
public enum Shipper
{
None,
SpeedyExpress,
UnitedPackage
}
答案 1 :(得分:0)
您可以通过以下方式进行操作。这样一来,如果强制转换出现错误,就可以避免获取InvalidCastException
,并且可以优雅地处理它或引发自定义异常。
class Program
{
static void Main(string[] args)
{
var enumAsString = "Value1";
Enum.TryParse(enumAsString, out SomeEnum enumeration);
if (enumeration == SomeEnum.Value1)
Console.WriteLine("success");
}
}
public enum SomeEnum
{
Value1,
Value2
}