请帮我。我上课了。
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
谢谢。
虽然存在多个答案,但您可以执行以下操作:
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));
我在没有编译器的情况下编写代码的速度非常快,因此如上所述,我需要进行改进。这应该是一个坚实的起点。
像那样?
Product p = new Product
{
SolidForm = (int)SolidForm.Solution
};
枚举到int
(INT)ProductModel.SolidForm
int到枚举
(SolidForm)Enum.ToObject(typeof(SolidForm),ProductModel.SolidForm)
你用的是什么映射器?
您可以在枚举声明中列出枚举,只要它们按顺序排列即可
您可以直接从枚举转换为int只使用类型转换
(int) SolidForm;