请帮帮我。我上课了。
public class ProductModel
{
public long ProductId { get; set; }
public int ContainerType { get; set; }
public SolidForm SolidForm { get; set; }
}
SolidForm是Enum。
public enum SolidForm
{
None = 0,
Molten = 1,
Solution = 2,
InPowderedForm = 3
}
我需要创建另一个模型For Example
public class Product
{
public long ProductId { get; set; }
public int ContainerType { get; set; }
public int SolidForm { get; set; }
}
其中属性SolidForm是Enum的值。
例如,如果我进入第一个模型SolidForm = SolidForm.Molten
在产品中进行转换之后我想要获得int SolidForm = 1
谢谢。
答案 0 :(得分:1)
虽然存在多个答案,但您可以执行以下操作:
public TType ConvertEnum<TType, TEnum>(TEnum content)
{
var validated = typeof(TEnum);
if(!validated.IsEnum)
throw new Exception("Non enum passed.");
var conversion = content as TType;
if(conversion != null)
return conversion;
return default(TType);
}
一个干净的可重用方法,加上它应该支持不同类型的转换,检查小提琴并且似乎在大多数实现中都能正常工作。
因此,在您的情况下,当您设置属性的值时,它将是:
Product.SolidForm = ConvertEnum<int, SolidForm>(SolidForm.Molten);
我认为默认情况下这一切:
public enum SolidForm
{
None,
Molten,
Solution
}
您的代码似乎不需要相等,因为它代表默认的递增方法,因为您没有覆盖这些值。
默认情况下,第一个枚举数的值为0,值为 每个连续的枚举数增加1.例如,在 在枚举之后,Sat为0,Sun为1,Mon为2,依此类推。
复制enum Days {周六,周日,周一,周二,周三,周四,周五};调查员可以 使用初始值设定项覆盖默认值,如下所示 以下示例。
复制enum Days {Sat = 1,Sun,Mon,Tue,Wed,Thu,Fri};在这 枚举,元素序列被强制从1开始 而不是0.但是,包含值为0的常量是 推荐的。有关更多信息,请参阅枚举类型。一切 枚举类型具有基础类型,可以是任何整数 除char之外的类型。枚举元素的默认基础类型 是int。要声明另一个整数类型的枚举,例如byte,请使用 标识符后面跟着类型的冒号,如图所示 以下示例。
更新:
public static TDestination MapProperty<TSource, TDestination>(TSource source, TDestination destination)
{
PropertyInfo[] sourceProperties = typeof(source).GetProperties();
foreach(var property in sourceProperties)
{
var destinationProperty = typeof(TDestination).GetProperty(property.Name);
if(destinationProperty != null)
{
// Error handling, validation of type, a bunch of other checks should go here.
var value = ((destinationProperty.PropertyType)property.GetValue(source, null));
destinationProperty.SetValue(destination, value, null);
}
}
return destination;
}
重要的是要注意,这将需要大量的异常处理。因为您必须了解枚举,可空类型等,以避免转换失败。此外,如果您的代码具有如此大的对象,则反射可能会很慢。
此代码的基础知识,循环遍历源对象,在目标对象上查找匹配,然后执行原始强制转换,然后设置值,然后返回目标对象。您可能还需要Activator.CreateInstance(typeof(Destination));
我在没有编译器的情况下编写代码非常快,因此如上所述,我需要进行改进。这应该是一个坚实的起点。
答案 1 :(得分:0)
Product p = new Product
{
SolidForm = (int)SolidForm.Solution
};
答案 2 :(得分:0)
Enum to int
(INT)ProductModel.SolidForm
int to enum
(SolidForm)Enum.ToObject(typeof(SolidForm),ProductModel.SolidForm)
您使用的是哪种映射器?
你可以在你的枚举声明中列出枚举,如果它们按顺序排列
答案 3 :(得分:0)
你可以直接从enum转换为int只使用类型转换
(int) SolidForm;