C# 如何使用 lambdas 或其他东西用来自不同列表的值初始化列表——需要简化
C# how to initialize list with values from different list using lambdas or something else -- need to simplify
我有以下代码,我想对其进行简化。
我需要填写 Clinician 的 属性 'Roles',这是一个 RoleModel 列表,预期角色以字符串形式提供 => 它们需要用逗号分隔并转换为 RoleModel 对象。
RoleModel 是字符串枚举。
枚举如下所示:
public enum RoleModel
{
ClinicManager = 1,
ClinicAssistant = 2
...
}
来自 specflow 数据的输入数据 table 可能如下所示:
| Roles |
| Clinic Assistant, Clinic Manager |
因此,我正在应用正则表达式来删除空格并将其拆分为一个列表,因为它需要转换为枚举,因为 Clinician 模型具有列表 'Role' 个 RoleModel 值。
目前我是这样的:
var expectedRolesString = row["Roles"];
var expectedRoles = Regex.Split(expectedRolesString.Replace(" ", ""), @"\s*[,;]\s*").ToList();
List<RoleModel> RoleList = new List<RoleModel>();
foreach (string role in expectedRoles)
{
RoleList.Add(Enum.Parse<RoleModel>(role));
}
Clinician = new Clinician()
{
List<RoleModel> Roles = RoleList
}
我想像这样直接初始化列表,但不知道如何使用 lambas 或其他东西来获取所有字符串的解析值列表:(
有没有办法在创建列表时完成所有这些步骤?
Clinician = new Clinician()
{
Roles = new List<RoleModel>()
{
Enum.Parse<RoleModel>(Regex.Split(expectedRolesString.Replace(" ", ""), @"\s*[,;]\s*").ToList()[0]),
Enum.Parse<RoleModel>(Regex.Split(expectedRolesString.Replace(" ", ""), @"\s*[,;]\s*").ToList()[1]),
...
}
}
看起来可能是
Clinician = new Clinician()
{
Roles = expectedRolesString.Split(',',';').Select(r => Enum.Parse<RoleModel>(r.Trim())).ToList()
}
或者
Clinician = new Clinician()
{
Roles = expectedRolesString.Split(new[]{',',';',' '}, StringSplitOptions.RemoveEmptyEntries).Select(Enum.Parse<RoleModel>).ToList()
}
..但我希望看到输入数据和枚举定义以确保
我有以下代码,我想对其进行简化。 我需要填写 Clinician 的 属性 'Roles',这是一个 RoleModel 列表,预期角色以字符串形式提供 => 它们需要用逗号分隔并转换为 RoleModel 对象。 RoleModel 是字符串枚举。
枚举如下所示:
public enum RoleModel
{
ClinicManager = 1,
ClinicAssistant = 2
...
}
来自 specflow 数据的输入数据 table 可能如下所示:
| Roles |
| Clinic Assistant, Clinic Manager |
因此,我正在应用正则表达式来删除空格并将其拆分为一个列表,因为它需要转换为枚举,因为 Clinician 模型具有列表 'Role' 个 RoleModel 值。
目前我是这样的:
var expectedRolesString = row["Roles"];
var expectedRoles = Regex.Split(expectedRolesString.Replace(" ", ""), @"\s*[,;]\s*").ToList();
List<RoleModel> RoleList = new List<RoleModel>();
foreach (string role in expectedRoles)
{
RoleList.Add(Enum.Parse<RoleModel>(role));
}
Clinician = new Clinician()
{
List<RoleModel> Roles = RoleList
}
我想像这样直接初始化列表,但不知道如何使用 lambas 或其他东西来获取所有字符串的解析值列表:( 有没有办法在创建列表时完成所有这些步骤?
Clinician = new Clinician()
{
Roles = new List<RoleModel>()
{
Enum.Parse<RoleModel>(Regex.Split(expectedRolesString.Replace(" ", ""), @"\s*[,;]\s*").ToList()[0]),
Enum.Parse<RoleModel>(Regex.Split(expectedRolesString.Replace(" ", ""), @"\s*[,;]\s*").ToList()[1]),
...
}
}
看起来可能是
Clinician = new Clinician()
{
Roles = expectedRolesString.Split(',',';').Select(r => Enum.Parse<RoleModel>(r.Trim())).ToList()
}
或者
Clinician = new Clinician()
{
Roles = expectedRolesString.Split(new[]{',',';',' '}, StringSplitOptions.RemoveEmptyEntries).Select(Enum.Parse<RoleModel>).ToList()
}
..但我希望看到输入数据和枚举定义以确保