Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
268 views
in Technique[技术] by (71.8m points)

c# - Assign multiple values to enum elements

Hi I have this enum currently

[Serializable]
public enum Country
{
    US      = 1,
    Canada  = 2,
}

When I usually get the integer from the database I convert it to the enum using

(Country) Convert.ToInt32("1")

I now have 2 sub regions in US and Canada, 1 & 2 for US and 3&4 for canada. So when I do

(Country) Convert.ToInt32("1") or (Country) Convert.ToInt32("2") i should get the enum to be US. and for 3 & 4 Canada. How do i implement this?

[Serializable]
public enum Country
{
    US      = 1,2
    Canada  = 3,4
}

Something like this. This is probably not right but just to give you an Idea.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

An enum may not be the right construct to model this kind of problem.

I would suggest creating a class to represent country information, and provide methods the convert to and from numeric representations. With problems like this, you also have to decide what coding value you will use when converting a selected Country instance into a numeric value.

The Enum Object pattern can be helpful starting point for modeling this kind of situation:

public sealed class Country
{
    // initialize appropriately in the constructor...
    private readonly int[] m_Values;
    private readonly string m_Name;

    // make the constructor private so that only this class can set up instances
    private Country( string name, int[] codes ) { ... }

    public static Country US = new Country("United States", new[]{ 1,2 } );
    public static Country Canada = new Country("Canada", new[] {3,4} );

    public static Country FromCode( int code ) { ... }
    public override string ToString() { return m_Name; }
    // ... etc...
}

Based on your example, you should also consider whether you need to model Country sub-regions as first-class entities, rather than simply folding them into the implementation details of your Country enumeration. Whether you should do this or not depends on your requirements and use cases, so only you can make an appropriate decision on that.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...