我有一个属性“UserType”作为枚举返回的数据实体,需要将其转换为另一个。
第一个枚举是(数字基于数据库中的值):
public enum UserType
{
Primary = 100001,
Secondary = 100002,
Other = 100003
}
这就是我想把它转换成的:
public enum UserType
{
Primary,
Secondary,
Other
}
这是为了在这个类上设置 UserType:
public class UserData
{
public UserType UserType{ get; set; }
}
可能类似于以下内容?
MemberType = MemberType(entity.MemberType.ReadValue())
有谁知道这样做的最佳方法吗?
答案 0 :(得分:1)
您可以使用 Enum.Parse
/Enum.TryParse
:
A.UserType ut1 = A.UserType.Primary;
B.UserData data = new B.UserData();
data.UserType = Enum.TryParse(typeof(B.UserType), ut1.ToString(), true, out object ut2) ? (B.UserType)ut2 : B.UserType.Other;
A
和 B
只是我用来区分两个枚举的命名空间。为了模拟它,我使用了类:
public class A
{
public enum UserType
{
Primary = 100001,
Secondary = 100002,
Other = 100003
}
}
public class B
{
public enum UserType
{
Primary,
Secondary,
Other
}
public class UserData
{
public UserType UserType { get; set; }
}
}
答案 1 :(得分:0)
如果您只需要一两次,老实说:我会手动编写:
return value switch {
Foo.A => Bar.A,
Foo.B => Bar.B,
Foo.C => Bar.C,
_ => throw new ArgumentOutOfRangeException(nameof(value)),
};
在更一般的情况下:涉及 ToString()
和 Enum.Parse
,例如:
static TTo ConvertEnumByName<TFrom, TTo>(TFrom value, bool ignoreCase = false)
where TFrom : struct
where TTo : struct
=> Enum.Parse<TTo>(value.ToString(), ignoreCase);