📅  最后修改于: 2023-12-03 15:26:35.500000             🧑  作者: Mango
枚举(Enumeration)是一种在编程中常常使用的数据类型,用于定义变量只能取预先定义好的值,枚举类型常用于代替数字或字符串。在 C# 中,枚举类型需要使用 enum 来定义。
enum WeekDays
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
在实际开发中,我们经常需要将一些枚举类型转换成相应的字符串或整数,或是将字符串或整数转换成相应的枚举类型。在操作数据库时,我们通常需要将枚举类型对应到数据库中的表。
可以使用 Enum 类的 GetValues 方法获取枚举类型的所有值。
WeekDays[] values = (WeekDays[])Enum.GetValues(typeof(WeekDays));
如果需要将枚举类型转换成相应的字符串,可以使用 Enum 类的 GetName 方法。
string dayName = Enum.GetName(typeof(WeekDays), WeekDays.Monday);
如果需要将字符串转换成相应的枚举类型,可以使用 Enum 类的 Parse 方法。
WeekDays day = (WeekDays)Enum.Parse(typeof(WeekDays), "Monday");
如果需要将整数转换成相应的枚举类型,可以直接将整数赋值给枚举类型。
WeekDays day = (WeekDays)0; // Monday
在操作数据库时,我们通常需要将枚举类型对应到数据库中的表。
例如,我们有一个枚举类型 Sex,其中 Male 表示男性,Female 表示女性。我们需要将这个枚举类型对应到数据库中的 users 表中的 sex 字段上。
enum Sex
{
Male,
Female
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public Sex Sex { get; set; }
}
对应的数据库表为:
CREATE TABLE users
(
id INT PRIMARY KEY IDENTITY NOT NULL,
name VARCHAR(50) NOT NULL,
sex INT NOT NULL
);
我们需要将 Sex 枚举类型中的 Male 和 Female 分别对应到数据库中的 0 和 1。可以为 Sex 枚举类型定义一个扩展方法 ToInt,将 Male 和 Female 分别转换成 0 和 1。
public static class SexExtensions
{
public static int ToInt(this Sex sex)
{
switch (sex)
{
case Sex.Male:
return 0;
case Sex.Female:
return 1;
default:
return -1;
}
}
}
在保存 User 对象到数据库时,我们可以将 Sex 属性通过 ToInt 方法转换成相应的整数,然后存入数据库。
using (var connection = new SqlConnection("Data Source=.;Initial Catalog=Test;Integrated Security=True"))
{
connection.Open();
var user = new User
{
Name = "Tom",
Sex = Sex.Male
};
var sql = "INSERT INTO users (name, sex) VALUES (@Name, @Sex)";
var command = new SqlCommand(sql, connection);
command.Parameters.AddWithValue("@Name", user.Name);
command.Parameters.AddWithValue("@Sex", user.Sex.ToInt());
command.ExecuteNonQuery();
}
读取数据库中的 User 对象时,我们可以将 sex 字段转换成相应的 Sex 枚举类型,然后赋值给 User 对象的 Sex 属性。
using (var connection = new SqlConnection("Data Source=.;Initial Catalog=Test;Integrated Security=True"))
{
connection.Open();
var sql = "SELECT id, name, sex FROM users WHERE id = @Id";
var command = new SqlCommand(sql, connection);
command.Parameters.AddWithValue("@Id", 1);
var reader = command.ExecuteReader();
if (reader.Read())
{
var user = new User
{
Id = (int)reader["id"],
Name = (string)reader["name"],
Sex = ((int)reader["sex"]).ToEnum<Sex>()
};
}
}