枚举默认的类型转换?那可能吗?

时间:2009-05-18 09:09:38

标签: c# asp.net linq linq-to-sql enums

是否可以对枚举进行默认的类型转换?

我经常使用枚举,例如状态,我想直接将枚举与LINQ字段进行比较,但我必须一直进行类型转换。

4 个答案:

答案 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