是否可以对枚举进行默认的类型转换?
我经常使用枚举,例如状态,我想直接将枚举与LINQ字段进行比较,但我必须一直进行类型转换。
答案 0 :(得分:2)
您应该能够在LINQ对象中拥有具有枚举类型的属性。这样你就不必施放。
因此,只需将属性更改为具有正确的枚举类型,您就不必再担心强制转换。您可以在LINQtoSQL设计器中执行此操作。只需右键单击属性,选择“属性”,然后在“Visual Studio属性”窗口中设置相应的“类型”。
答案 1 :(得分:2)
答案更简单!!!
我的一位好朋友告诉我这很简单!看看这个样本!
public enum State:byte
{
EmailNotValidated = 0x00,
EmailValidated = 0x10,
Admin_AcceptPending = 0x40,
Active = 0x80,
Admin_BlockedAccount = 0xff
}
注意枚举名称后面的:BYTE 部分...我正在寻找的技巧!但感谢大家为我而努力!
答案 2 :(得分:1)
LINQ-to-SQL通常会处理直接整数映射和精确字符串(名称)映射(注意:区分大小写)。含义:在某处编写枚举,并在设计器中将属性类型设置为完全限定的枚举名称:Some.Namespace.MyEnum
。它通常应该有用。
对于非平凡的映射(例如,列是具有混合大小写值的varchar,或者类似“正在进行”[注意空格]),您必须将存储属性保留为{{1} } / int
(等)并手动映射。我通常通过将其标记为私有并将其命名为varchar
并在分部类中添加映射属性来执行此操作:
FooStorage
唯一的问题是LINQ查询只能用于存储属性(而不是bespoke属性)。
答案 3 :(得分:0)
您是否尝试过扩展方法?
public enum MyEnum
{
First = 1,
Second = 2,
Third = 3
}
public static class Utility
{
public static string Description(this Enum e)
{
Type t = e.GetType();
DescriptionAttribute[] desc =
(DescriptionAttribute[])(t.GetField(e.ToString())
.GetCustomAttributes(typeof(DescriptionAttribute), false));
return desc.Length > 0 ? desc[0].Description : e.ToString();
}
public static byte ToByte(this Enum ai)
{
object o=Enum.ToObject(ai.GetType(), ai);
return Convert.ToByte(o);
}
}
class Program
{
static void Main(string[] args)
{
MyEnum me = MyEnum.Third;
Console.WriteLine("Value: {0}\r\nType: {1}"
,me.ToByte(),me.ToByte().GetType().ToString());
Console.ReadLine();
}
}
输出:
价值:3
输入:System.Byte