Get int value from enum in C#
I have a class called Questions
(plural). In this class there is an enum called Question
(singular) which looks like this.
public enum Question
Role = 2,
ProjectFunding = 3,
TotalEmployee = 4,
NumberOfServers = 5,
TopBusinessConcern = 6
In the Questions
class, I have a get(int foo)
function that returns a Questions
object for that foo
. Is there an easy way to get the integer value from the enum so I can do something like Questions.Get(Question.Role)
?
c# enums casting int
add a comment |
I have a class called Questions
(plural). In this class there is an enum called Question
(singular) which looks like this.
public enum Question
Role = 2,
ProjectFunding = 3,
TotalEmployee = 4,
NumberOfServers = 5,
TopBusinessConcern = 6
In the Questions
class, I have a get(int foo)
function that returns a Questions
object for that foo
. Is there an easy way to get the integer value from the enum so I can do something like Questions.Get(Question.Role)
?
c# enums casting int
24
For the other way around: cast-int-to-enum-in-c-sharp.
– nawfal
Jun 9 '13 at 11:54
6
I know I'm late to the party, but instead of defining your method asget(int foo)
you can define it asget(Question foo)
then do your casting inside the method, the you can call your method asQuestions.Get(Question.Role)
– Joe
Feb 7 '17 at 15:10
add a comment |
I have a class called Questions
(plural). In this class there is an enum called Question
(singular) which looks like this.
public enum Question
Role = 2,
ProjectFunding = 3,
TotalEmployee = 4,
NumberOfServers = 5,
TopBusinessConcern = 6
In the Questions
class, I have a get(int foo)
function that returns a Questions
object for that foo
. Is there an easy way to get the integer value from the enum so I can do something like Questions.Get(Question.Role)
?
c# enums casting int
I have a class called Questions
(plural). In this class there is an enum called Question
(singular) which looks like this.
public enum Question
Role = 2,
ProjectFunding = 3,
TotalEmployee = 4,
NumberOfServers = 5,
TopBusinessConcern = 6
In the Questions
class, I have a get(int foo)
function that returns a Questions
object for that foo
. Is there an easy way to get the integer value from the enum so I can do something like Questions.Get(Question.Role)
?
c# enums casting int
c# enums casting int
edited Feb 27 '18 at 15:05
Sae1962
545821
545821
asked Jun 3 '09 at 6:46
jimjim
9,503124464
9,503124464
24
For the other way around: cast-int-to-enum-in-c-sharp.
– nawfal
Jun 9 '13 at 11:54
6
I know I'm late to the party, but instead of defining your method asget(int foo)
you can define it asget(Question foo)
then do your casting inside the method, the you can call your method asQuestions.Get(Question.Role)
– Joe
Feb 7 '17 at 15:10
add a comment |
24
For the other way around: cast-int-to-enum-in-c-sharp.
– nawfal
Jun 9 '13 at 11:54
6
I know I'm late to the party, but instead of defining your method asget(int foo)
you can define it asget(Question foo)
then do your casting inside the method, the you can call your method asQuestions.Get(Question.Role)
– Joe
Feb 7 '17 at 15:10
24
24
For the other way around: cast-int-to-enum-in-c-sharp.
– nawfal
Jun 9 '13 at 11:54
For the other way around: cast-int-to-enum-in-c-sharp.
– nawfal
Jun 9 '13 at 11:54
6
6
I know I'm late to the party, but instead of defining your method as
get(int foo)
you can define it as get(Question foo)
then do your casting inside the method, the you can call your method as Questions.Get(Question.Role)
– Joe
Feb 7 '17 at 15:10
I know I'm late to the party, but instead of defining your method as
get(int foo)
you can define it as get(Question foo)
then do your casting inside the method, the you can call your method as Questions.Get(Question.Role)
– Joe
Feb 7 '17 at 15:10
add a comment |
26 Answers
26
active
oldest
votes
Just cast the enum, e.g.
int something = (int) Question.Role;
The above will work for the vast majority of enums you see in the wild, as the default underlying type for an enum is int
.
However, as cecilphillip points out, enums can have different underlying types.
If an enum is declared as a uint
, long
, or ulong
, it should be cast to the type of the enum; e.g. for
enum StarsInMilkyWay:long Sun = 1, V645Centauri = 2 .. Wolf424B = 2147483649;
you should use
long something = (long)StarsInMilkyWay.Wolf424B;
23
@Harry it isn't true. You can create Enumeration without casting, it is not required. and I only assign number in special cases, most of the time, I leave it as default value. but you can doenum Test Item = 1
and see that1 == (int)Test.Item
is equal.
– Jaider
Jun 28 '12 at 20:47
31
@Jaider(int)Test.Item
That is a cast! () is the explicit cast operator.
– Sinthia V
Jul 26 '12 at 19:02
44
@Sinthia V he said you can create it without casting, which is correct
– Paul Ridgway
Aug 17 '12 at 18:30
5
If the underlying type forenum Question
was notint
butlong
this cast will truncateRole
s integral value!
– quaylar
Oct 29 '13 at 16:14
1
When you accept anEnum
as a parameter, you know is only a fixed number of possible integral values you can get. On the other hand, if you take simply anint
, then you have to validate if thatint
is within the accepted values., thus complicating the code. You can always override your signatures like ``` public void MyMethod(int x) // do something with x public void MyMethod(Enum x) this.MyMethod((int) x); ````
– percebus
Aug 18 '15 at 16:52
|
show 5 more comments
Since Enums can be any integral type (byte
, int
, short
, etc.), a more robust way to get the underlying integral value of the enum would be to make use of the GetTypeCode
method in conjunction with the Convert
class:
enum Sides
Left, Right, Top, Bottom
Sides side = Sides.Bottom;
object val = Convert.ChangeType(side, side.GetTypeCode());
Console.WriteLine(val);
This should work regardless of the underlying integral type.
25
This technique proved its worth to me when dealing with a generic type where T:enum (actually T:struct, IConvertible but that's a different story).
– aboy021
Jul 5 '11 at 23:20
1
How would you modify this to print out the hexadecimal value of side? This example shows the decimal value. The problem is thatvar
is of typeobject
, so you need to unbox it and it gets messier than I would like.
– Mark Lakata
Nov 9 '12 at 2:15
2
I think you should change the example toobject val = Convert...etc
thevar
in your example will always beobject
.
– Mesh
Oct 23 '13 at 8:20
2
@TimAbell All I can really say is that we found that dynamically compiled aspx pages (where you have to deploy the .cs files to the live server) were assigning the integers differently to each value. That meant that serialised objects one one machine, were deserialising with different values on a different machine and effectively getting corrupted (causing hours of confusion). We raised it with MS and I seem to recall they said that the autogenerated integers were not guaranteed to be the same when built across different framework versions.
– NickG
Mar 24 '15 at 9:42
3
@TimAbell On a separate occasion, a developer deleted an obsolete/unused Enum value causing all other values in the sequence to be out by one. As such, our coding standards now require that IDs are always specified explicitly, otherwise adding/deleting or even auto-formatting the code (e.g. sorting alphabetically) will change all the values causing data corruption. I would strongly advise anyone to specify all Enum integers explicitly. This is ultra-important if they correlate to externally (database) stored values.
– NickG
Mar 24 '15 at 9:46
|
show 9 more comments
Declare it as a static class having public constants:
public static class Question
public const int Role = 2;
public const int ProjectFunding = 3;
public const int TotalEmployee = 4;
public const int NumberOfServers = 5;
public const int TopBusinessConcern = 6;
And then you can reference it as Question.Role
, and it always evaluates to an int
or whatever you define it as.
6
I'm surprised this hasn't got more votes - it's so obvious if you really want to use the int type natively.
– CAD bloke
May 15 '13 at 19:40
28
I'd usestatic readonly int
because constants are compiled into their hard values. See stackoverflow.com/a/755693/492
– CAD bloke
May 15 '13 at 23:16
83
This solution actually doesn't provide the real benefit of strongly typed enums. If I only wanted to pass a GameState-enum-parameter to a specific method for example, the compiler shouldn't allow me to pass any int-variable as a parameter.
– thgc
Apr 12 '14 at 18:24
8
@CADBloke which is precisely why you would useconst
and notstatic readonly
because every time you comparestatic readonly
you're making a method call to get the value of the variable whereas with aconst
you're comparing two value types directly.
– blockloop
Aug 14 '14 at 17:11
3
@brettof86 Yes, a const would be faster, if the compilation limitation will never be problem then it's all good.
– CAD bloke
Aug 15 '14 at 10:57
|
show 7 more comments
Question question = Question.Role;
int value = (int) question;
Will result in value == 2
.
31
The temporary variable question is unnecessary.
– Gishu
Jun 3 '09 at 6:51
1
So something like this Questions.Get(Convert.ToInt16(Question.Applications))
– jim
Jun 3 '09 at 6:51
3
no need to convert it - just cast.
– Michael Petrotta
Jun 3 '09 at 6:52
5
You can simply cast in either direction; the only thing to watch is that enums don't enforce anything (the enum value could be 288, even though no Question exists with that number)
– Marc Gravell♦
Jun 3 '09 at 6:54
1
@Gishu You could say it's ... questionable. ;)
– Felix D.
Dec 16 '17 at 16:10
|
show 4 more comments
On a related note, if you want to get the int
value from System.Enum
, then given e
here:
Enum e = Question.Role;
You can use:
int i = Convert.ToInt32(e);
int i = (int)(object)e;
int i = (int)Enum.Parse(e.GetType(), e.ToString());
int i = (int)Enum.ToObject(e.GetType(), e);
The last two are plain ugly. I prefer the first one.
add a comment |
It's easier than you think - an enum is already an int. It just needs to be reminded:
int y = (int)Question.Role;
Console.WriteLine(y); // prints 2
14
Nitpick: this enum is already an int. Other enums might be different types -- try "enum SmallEnum : byte A, B, C "
– mquander
Jun 3 '09 at 6:56
9
Absolutely true. C# reference: "Every enumeration type has an underlying type, which can be any integral type except char."
– Michael Petrotta
Jun 3 '09 at 6:59
add a comment |
Example:
public Enum EmpNo
Raj = 1,
Rahul,
Priyanka
And in the code behind to get enum value:
int setempNo = (int)EmpNo.Raj; //This will give setempNo = 1
or
int setempNo = (int)EmpNo.Rahul; //This will give setempNo = 2
Enums will increment by 1, and you can set the start value. If you don't set the start value it will be assigned as 0 initially.
6
Does this actually compile?
– Peter Mortensen
Jan 7 '16 at 20:04
Can something that is a Raj be also be a Rahul or a Priyanka? Your values conflict and should double to be unique e.g. 0, 1, 2, 4, 8, etc. This is my core concern with enums.
– Timothy Gonzalez
Nov 14 '16 at 21:58
4
I'm quite sure a coma is missing afterRaj = 1
, andPublic Enum
should bepublic enum
– Rafalon
Feb 26 '18 at 14:03
add a comment |
I have recently converted away from using enums in my code in favour of instead using classes with protected constructors and predefined static instances (thanks to Roelof - C# Ensure Valid Enum Values - Futureproof Method).
In light of that, below's how I'd now approach this issue (including implicit conversion to/from int
).
public class Question
// Attributes
protected int index;
protected string name;
// Go with a dictionary to enforce unique index
//protected static readonly ICollection<Question> values = new Collection<Question>();
protected static readonly IDictionary<int,Question> values = new Dictionary<int,Question>();
// Define the "enum" values
public static readonly Question Role = new Question(2,"Role");
public static readonly Question ProjectFunding = new Question(3, "Project Funding");
public static readonly Question TotalEmployee = new Question(4, "Total Employee");
public static readonly Question NumberOfServers = new Question(5, "Number of Servers");
public static readonly Question TopBusinessConcern = new Question(6, "Top Business Concern");
// Constructors
protected Question(int index, string name)
this.index = index;
this.name = name;
values.Add(index, this);
// Easy int conversion
public static implicit operator int(Question question) =>
question.index; //nb: if question is null this will return a null pointer exception
public static implicit operator Question(int index) =>
values.TryGetValue(index, out var question) ? question : null;
// Easy string conversion (also update ToString for the same effect)
public override string ToString() =>
this.name;
public static implicit operator string(Question question) =>
question?.ToString();
public static implicit operator Question(string name) =>
name == null ? null : values.Values.FirstOrDefault(item => name.Equals(item.name, StringComparison.CurrentCultureIgnoreCase));
// If you specifically want a Get(int x) function (though not required given the implicit converstion)
public Question Get(int foo) =>
foo; //(implicit conversion will take care of the conversion for you)
The advantage of this approach is you get everything you would have from the enum, but your code's now much more flexible, so should you need to perform different actions based on the value of Question
, you can put logic into Question
itself (i.e. in the preferred OO fashion) as opposed to putting lots of case statements throughout your code to tackle each scenario.
NB: Answer updated 2018-04-27 to make use of C# 6 features; i.e. declaration expressions and lambda expression body definitions. See revision history for original code. This has the benefit of making the definition a little less verbose; which had been one of the main complaints about this answer's approach.
1
I guess it's the trade off between explicit cast and the code you have to write to circumvent it. Still love the implementation just wish it wasn't so lengthy. +1
– Lankymart
Aug 2 '13 at 10:40
1
I've used several different type of classes structured similar to this. I find they work wonders when trying to follow the "don't let me be an idiot later" methodology.
– James Haug
Sep 8 '16 at 16:13
add a comment |
If you want to get an integer for the enum value that is stored in a variable, wich the type would be Question
, to use for example in a method, you can simply do this I wrote in this example:
enum Talen
Engels = 1, Italiaans = 2, Portugees = 3, Nederlands = 4, Duits = 5, Dens = 6
Talen Geselecteerd;
public void Form1()
InitializeComponent()
Geselecteerd = Talen.Nederlands;
// You can use the Enum type as a parameter, so any enumeration from any enumerator can be used as parameter
void VeranderenTitel(Enum e)
this.Text = Convert.ToInt32(e).ToString();
This will change the window title to 4 because the variable Geselecteerd
is Talen.Nederlands
. If I change it to Talen.Portugees
and call the method again, the text will change to 3.
I had a hard time finding this simple solution on the internet and I couldn't find it, so I was testing something and found this out. Hope this helps. ;)
1
coding in dutch. oh dear.
– WiseStrawberry
Jan 9 at 14:57
Unfortunately, this approach gives poor performance the more you use it. I tried it in some code of mine, and as time went on, my application got slower and slower, with less and less CPU usage. This implied that the threads were waiting on something - I'm assuming some kind of garbage collection, possibly due to boxing the enum parameter to ToInt32(). By switching to a simple int.Parse(), I was able to eliminate this poor performance completely, and the performance stayed the same no matter how long the code ran.
– Greg
Feb 4 at 18:38
add a comment |
To ensure an enum value exists and then parse it, you can also do the following.
// Fake Day of Week
string strDOWFake = "SuperDay";
// Real Day of Week
string strDOWReal = "Friday";
// Will hold which ever is the real DOW.
DayOfWeek enmDOW;
// See if fake DOW is defined in the DayOfWeek enumeration.
if (Enum.IsDefined(typeof(DayOfWeek), strDOWFake))
// This will never be reached since "SuperDay"
// doesn't exist in the DayOfWeek enumeration.
enmDOW = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), strDOWFake);
// See if real DOW is defined in the DayOfWeek enumeration.
else if (Enum.IsDefined(typeof(DayOfWeek), strDOWReal))
// This will parse the string into it's corresponding DOW enum object.
enmDOW = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), strDOWReal);
// Can now use the DOW enum object.
Console.Write("Today is " + enmDOW.ToString() + ".");
I hope this helps.
add a comment |
One more way to do it:
Console.WriteLine("Name: 0, Value: 0:D", Question.Role);
Will result in:
Name: Role, Value: 2
add a comment |
Maybe I missed it but has anyone tried a simple generic extension method. This works great for me. You can avoid the type cast in your API this way but ultimately it results in a change type operation. This is a good case for programming Roselyn to have the compiler make a GetValue method for you.
public static void Main()
int test = MyCSharpWrapperMethod(TestEnum.Test1);
Debug.Assert(test == 1);
public static int MyCSharpWrapperMethod(TestEnum customFlag)
return MyCPlusPlusMethod(customFlag.GetValue<int>());
public static int MyCPlusPlusMethod(int customFlag)
//Pretend you made a PInvoke or COM+ call to C++ method that require an integer
return customFlag;
public enum TestEnum
Test1 = 1,
Test2 = 2,
Test3 = 3
}
public static class EnumExtensions
public static T GetValue<T>(this Enum enumeration)
T result = default(T);
try
result = (T)Convert.ChangeType(enumeration, typeof(T));
catch (Exception ex)
Debug.Assert(false);
Debug.WriteLine(ex);
return result;
Possibly because doing (int)customFlag is less typing all around and does more or less the same thing?
– Tim Keating
Nov 11 '14 at 17:32
add a comment |
public enum QuestionType
Role = 2,
ProjectFunding = 3,
TotalEmployee = 4,
NumberOfServers = 5,
TopBusinessConcern = 6
...is a fine declaration.
You do have to cast the result to int like so:
int Question = (int)QuestionType.Role
Otherwise, the type is still QuestionType
.
This level of strictness is the C# way.
One alternative is to use a class declaration instead:
public class QuestionType
public static int Role = 2,
public static int ProjectFunding = 3,
public static int TotalEmployee = 4,
public static int NumberOfServers = 5,
public static int TopBusinessConcern = 6
It's less elegant to declare, but you don't need to cast it in code:
int Question = QuestionType.Role
Alternatively, you may feel more comfortable with Visual Basic, which caters for this type of expectation in many areas.
add a comment |
int number = Question.Role.GetHashCode();
number
should have the value 2
.
GetHashCode is one way to get value from Enum common mask
– ThanhLD
Nov 9 '18 at 4:08
add a comment |
You can do this by implementing an Extension Method to your defined enum type:
public static class MyExtensions
public static int getNumberValue(this Question questionThis)
return (int)questionThis;
This simplify getting int value of current enum value:
Question question = Question.Role;
int value = question.getNumberValue();
or
int value = Question.Role.getNumberValue();
4
Bronek, what you did is make up uninformative syntax through a (non generic btw) extension method that actually takes longer to write. I fail to see how it is better than the original solution by Tetraneutron. Let us not make this into a chat, help is always welcome in stackoverflow and everyone here is here to help. Please take my comment as constructive criticism.
– Benjamin Gruenbaum
Dec 10 '12 at 0:28
2
Benjamin,first of all,why did you delete my comment?I don't understand your decisions-maybe somebody else through the community would agree with my comment.Secondly,my solution wraps Tetraneutron's one and accurately it is easier and less writing because an extension method is suggested by IntelliSense.So I think your decision is not impartial and representative.I see many similar answering on Stack and it is OK.Anyway I use my solution and maybe there are some people would choose my solution in the future,but these negative points make it harder to find.Most of all it is correct and not copy.
– Bronek
Dec 10 '12 at 3:20
2
@Bronek If you don't ping me I get no indication that you replied. I did not delete your comment I do not have the ability or want to do so. Likely a mod came by and deleted it - you're welcome to flag it for moderator attention and ask why or better yet - ask on Meta Stack Overflow. I have an opinion about your solution from a programming stand point which is perfectly in my right - this is what comments are for to begin with, no need to take it personal.
– Benjamin Gruenbaum
Aug 7 '13 at 14:45
add a comment |
How about a extension method instead:
public static class ExtensionMethods
public static int IntValue(this Enum argEnum)
return Convert.ToInt32(argEnum);
And the usage is slightly prettier:
var intValue = Question.Role.IntValue();
add a comment |
My fav hack with int or smaller enums:
GetHashCode();
For a enum
public enum Test
Min = Int32.MinValue,
One = 1,
Max = Int32.MaxValue,
this
var values = Enum.GetValues(typeof(Test));
foreach (var val in values)
Console.WriteLine(val.GetHashCode());
Console.WriteLine(((int)val));
Console.WriteLine(val);
outputs
one
1
1
max
2147483647
2147483647
min
-2147483648
-2147483648
Disclaimer:
Doesn't work for enums based on long
add a comment |
public enum Suit : int
Spades = 0,
Hearts = 1,
Clubs = 2,
Diamonds = 3
Console.WriteLine((int)(Suit)Enum.Parse(typeof(Suit), "Clubs"));
//from int
Console.WriteLine((Suit)1);
//From number you can also
Console.WriteLine((Suit)Enum.ToObject(typeof(Suit), 1));
if (typeof(Suit).IsEnumDefined("Spades"))
var res = (int)(Suit)Enum.Parse(typeof(Suit), "Spades");
Console.Out.WriteLine("0", res);
add a comment |
Following is the extension method
public static string ToEnumString<TEnum>(this int enumValue)
var enumString = enumValue.ToString();
if (Enum.IsDefined(typeof(TEnum), enumValue))
enumString = ((TEnum) Enum.ToObject(typeof (TEnum), enumValue)).ToString();
return enumString;
add a comment |
The example I would like to suggest 'to get 'int' value from enum is,'
public enum Sample
Book =1, Pen=2, Pencil =3
int answer = (int)Sample.Book;
now the answer will be 1.
I hope this might help someone.
add a comment |
Since enums can be declared with multiple primitive types, a generic extension method to cast any enum type can be useful.
enum Box
HEIGHT,
WIDTH,
DEPTH
public static void UseEnum()
int height = Box.HEIGHT.GetEnumValue<int>();
int width = Box.WIDTH.GetEnumValue<int>();
int depth = Box.DEPTH.GetEnumValue<int>();
public static T GetEnumValue<T>(this object e) => (T)e;
add a comment |
The easiest solution I can think of is overloading the Get(int)
method like this:
[modifiers] Questions Get(Question q)
return Get((int)q);
where [modifiers]
can generally be same as for Get(int)
method. If You can't edit the Questions
class or for some reason don't want to, You can overload the method by writing an extension:
public static class Extensions
public static Questions Get(this Questions qs, Question q)
return qs.Get((int)q);
add a comment |
Try this one instead of convert enum to int:
public static class ReturnType
public static readonly int Success = 1;
public static readonly int Duplicate = 2;
public static readonly int Error = -1;
add a comment |
In Vb. It should be
Public Enum Question
Role = 2
ProjectFunding = 3
TotalEmployee = 4
NumberOfServers = 5
TopBusinessConcern = 6
End Enum
Private value As Integer = CInt(Question.Role)
The question is for C#.
– Ctrl S
Nov 19 '18 at 13:37
add a comment |
I a bit late to the game but I came up with this extension method that includes current language features. By using dynamic, I don't need to make this a generic method and specify the type which keeps the invocation simpler and consistent. Please let me know if I've done something wrong:
public static class EnumEx
improve this answer
add a comment
public static class EnumExtensions
public static T GetValue<T>(this Enum enumeration)
T result = default(T);
try
result = (T)Convert.ChangeType(enumeration, typeof(T));
catch (Exception ex)
Debug.Assert(false);
Debug.WriteLine(ex);
return result;
Possibly because doing (int)customFlag is less typing all around and does more or less the same thing?
– Tim Keating
Nov 11 '14 at 17:32
add a comment |
Maybe I missed it but has anyone tried a simple generic extension method. This works great for me. You can avoid the type cast in your API this way but ultimately it results in a change type operation. This is a good case for programming Roselyn to have the compiler make a GetValue method for you.
public static void Main()
int test = MyCSharpWrapperMethod(TestEnum.Test1);
Debug.Assert(test == 1);
public static int MyCSharpWrapperMethod(TestEnum customFlag)
return MyCPlusPlusMethod(customFlag.GetValue<int>());
public static int MyCPlusPlusMethod(int customFlag)
//Pretend you made a PInvoke or COM+ call to C++ method that require an integer
return customFlag;
public enum TestEnum
Test1 = 1,
Test2 = 2,
Test3 = 3
}
public static class EnumExtensions
public static T GetValue<T>(this Enum enumeration)
T result = default(T);
try
result = (T)Convert.ChangeType(enumeration, typeof(T));
catch (Exception ex)
Debug.Assert(false);
Debug.WriteLine(ex);
return result;
Possibly because doing (int)customFlag is less typing all around and does more or less the same thing?
– Tim Keating
Nov 11 '14 at 17:32
add a comment |
Maybe I missed it but has anyone tried a simple generic extension method. This works great for me. You can avoid the type cast in your API this way but ultimately it results in a change type operation. This is a good case for programming Roselyn to have the compiler make a GetValue method for you.
public static void Main()
int test = MyCSharpWrapperMethod(TestEnum.Test1);
Debug.Assert(test == 1);
public static int MyCSharpWrapperMethod(TestEnum customFlag)
return MyCPlusPlusMethod(customFlag.GetValue<int>());
public static int MyCPlusPlusMethod(int customFlag)
//Pretend you made a PInvoke or COM+ call to C++ method that require an integer
return customFlag;
public enum TestEnum
Test1 = 1,
Test2 = 2,
Test3 = 3
}
public static class EnumExtensions
public static T GetValue<T>(this Enum enumeration)
T result = default(T);
try
result = (T)Convert.ChangeType(enumeration, typeof(T));
catch (Exception ex)
Debug.Assert(false);
Debug.WriteLine(ex);
return result;
Maybe I missed it but has anyone tried a simple generic extension method. This works great for me. You can avoid the type cast in your API this way but ultimately it results in a change type operation. This is a good case for programming Roselyn to have the compiler make a GetValue method for you.
public static void Main()
int test = MyCSharpWrapperMethod(TestEnum.Test1);
Debug.Assert(test == 1);
public static int MyCSharpWrapperMethod(TestEnum customFlag)
return MyCPlusPlusMethod(customFlag.GetValue<int>());
public static int MyCPlusPlusMethod(int customFlag)
//Pretend you made a PInvoke or COM+ call to C++ method that require an integer
return customFlag;
public enum TestEnum
Test1 = 1,
Test2 = 2,
Test3 = 3
}
public static class EnumExtensions
public static T GetValue<T>(this Enum enumeration)
T result = default(T);
try
result = (T)Convert.ChangeType(enumeration, typeof(T));
catch (Exception ex)
Debug.Assert(false);
Debug.WriteLine(ex);
return result;
answered Sep 27 '14 at 1:30
DougDoug
15216
15216
Possibly because doing (int)customFlag is less typing all around and does more or less the same thing?
– Tim Keating
Nov 11 '14 at 17:32
add a comment |
Possibly because doing (int)customFlag is less typing all around and does more or less the same thing?
– Tim Keating
Nov 11 '14 at 17:32
Possibly because doing (int)customFlag is less typing all around and does more or less the same thing?
– Tim Keating
Nov 11 '14 at 17:32
Possibly because doing (int)customFlag is less typing all around and does more or less the same thing?
– Tim Keating
Nov 11 '14 at 17:32
add a comment |
public enum QuestionType
Role = 2,
ProjectFunding = 3,
TotalEmployee = 4,
NumberOfServers = 5,
TopBusinessConcern = 6
...is a fine declaration.
You do have to cast the result to int like so:
int Question = (int)QuestionType.Role
Otherwise, the type is still QuestionType
.
This level of strictness is the C# way.
One alternative is to use a class declaration instead:
public class QuestionType
public static int Role = 2,
public static int ProjectFunding = 3,
public static int TotalEmployee = 4,
public static int NumberOfServers = 5,
public static int TopBusinessConcern = 6
It's less elegant to declare, but you don't need to cast it in code:
int Question = QuestionType.Role
Alternatively, you may feel more comfortable with Visual Basic, which caters for this type of expectation in many areas.
add a comment |
public enum QuestionType
Role = 2,
ProjectFunding = 3,
TotalEmployee = 4,
NumberOfServers = 5,
TopBusinessConcern = 6
...is a fine declaration.
You do have to cast the result to int like so:
int Question = (int)QuestionType.Role
Otherwise, the type is still QuestionType
.
This level of strictness is the C# way.
One alternative is to use a class declaration instead:
public class QuestionType
public static int Role = 2,
public static int ProjectFunding = 3,
public static int TotalEmployee = 4,
public static int NumberOfServers = 5,
public static int TopBusinessConcern = 6
It's less elegant to declare, but you don't need to cast it in code:
int Question = QuestionType.Role
Alternatively, you may feel more comfortable with Visual Basic, which caters for this type of expectation in many areas.
add a comment |
public enum QuestionType
Role = 2,
ProjectFunding = 3,
TotalEmployee = 4,
NumberOfServers = 5,
TopBusinessConcern = 6
...is a fine declaration.
You do have to cast the result to int like so:
int Question = (int)QuestionType.Role
Otherwise, the type is still QuestionType
.
This level of strictness is the C# way.
One alternative is to use a class declaration instead:
public class QuestionType
public static int Role = 2,
public static int ProjectFunding = 3,
public static int TotalEmployee = 4,
public static int NumberOfServers = 5,
public static int TopBusinessConcern = 6
It's less elegant to declare, but you don't need to cast it in code:
int Question = QuestionType.Role
Alternatively, you may feel more comfortable with Visual Basic, which caters for this type of expectation in many areas.
public enum QuestionType
Role = 2,
ProjectFunding = 3,
TotalEmployee = 4,
NumberOfServers = 5,
TopBusinessConcern = 6
...is a fine declaration.
You do have to cast the result to int like so:
int Question = (int)QuestionType.Role
Otherwise, the type is still QuestionType
.
This level of strictness is the C# way.
One alternative is to use a class declaration instead:
public class QuestionType
public static int Role = 2,
public static int ProjectFunding = 3,
public static int TotalEmployee = 4,
public static int NumberOfServers = 5,
public static int TopBusinessConcern = 6
It's less elegant to declare, but you don't need to cast it in code:
int Question = QuestionType.Role
Alternatively, you may feel more comfortable with Visual Basic, which caters for this type of expectation in many areas.
edited Feb 27 '18 at 17:07
answered Mar 31 '14 at 16:35
Knickerless-NogginsKnickerless-Noggins
5,32134759
5,32134759
add a comment |
add a comment |
int number = Question.Role.GetHashCode();
number
should have the value 2
.
GetHashCode is one way to get value from Enum common mask
– ThanhLD
Nov 9 '18 at 4:08
add a comment |
int number = Question.Role.GetHashCode();
number
should have the value 2
.
GetHashCode is one way to get value from Enum common mask
– ThanhLD
Nov 9 '18 at 4:08
add a comment |
int number = Question.Role.GetHashCode();
number
should have the value 2
.
int number = Question.Role.GetHashCode();
number
should have the value 2
.
edited Oct 27 '15 at 12:26
Pepijn van Leeuwen
498617
498617
answered Sep 18 '14 at 22:53
JaimeArmentaJaimeArmenta
9913
9913
GetHashCode is one way to get value from Enum common mask
– ThanhLD
Nov 9 '18 at 4:08
add a comment |
GetHashCode is one way to get value from Enum common mask
– ThanhLD
Nov 9 '18 at 4:08
GetHashCode is one way to get value from Enum common mask
– ThanhLD
Nov 9 '18 at 4:08
GetHashCode is one way to get value from Enum common mask
– ThanhLD
Nov 9 '18 at 4:08
add a comment |
You can do this by implementing an Extension Method to your defined enum type:
public static class MyExtensions
public static int getNumberValue(this Question questionThis)
return (int)questionThis;
This simplify getting int value of current enum value:
Question question = Question.Role;
int value = question.getNumberValue();
or
int value = Question.Role.getNumberValue();
4
Bronek, what you did is make up uninformative syntax through a (non generic btw) extension method that actually takes longer to write. I fail to see how it is better than the original solution by Tetraneutron. Let us not make this into a chat, help is always welcome in stackoverflow and everyone here is here to help. Please take my comment as constructive criticism.
– Benjamin Gruenbaum
Dec 10 '12 at 0:28
2
Benjamin,first of all,why did you delete my comment?I don't understand your decisions-maybe somebody else through the community would agree with my comment.Secondly,my solution wraps Tetraneutron's one and accurately it is easier and less writing because an extension method is suggested by IntelliSense.So I think your decision is not impartial and representative.I see many similar answering on Stack and it is OK.Anyway I use my solution and maybe there are some people would choose my solution in the future,but these negative points make it harder to find.Most of all it is correct and not copy.
– Bronek
Dec 10 '12 at 3:20
2
@Bronek If you don't ping me I get no indication that you replied. I did not delete your comment I do not have the ability or want to do so. Likely a mod came by and deleted it - you're welcome to flag it for moderator attention and ask why or better yet - ask on Meta Stack Overflow. I have an opinion about your solution from a programming stand point which is perfectly in my right - this is what comments are for to begin with, no need to take it personal.
– Benjamin Gruenbaum
Aug 7 '13 at 14:45
add a comment |
You can do this by implementing an Extension Method to your defined enum type:
public static class MyExtensions
public static int getNumberValue(this Question questionThis)
return (int)questionThis;
This simplify getting int value of current enum value:
Question question = Question.Role;
int value = question.getNumberValue();
or
int value = Question.Role.getNumberValue();
4
Bronek, what you did is make up uninformative syntax through a (non generic btw) extension method that actually takes longer to write. I fail to see how it is better than the original solution by Tetraneutron. Let us not make this into a chat, help is always welcome in stackoverflow and everyone here is here to help. Please take my comment as constructive criticism.
– Benjamin Gruenbaum
Dec 10 '12 at 0:28
2
Benjamin,first of all,why did you delete my comment?I don't understand your decisions-maybe somebody else through the community would agree with my comment.Secondly,my solution wraps Tetraneutron's one and accurately it is easier and less writing because an extension method is suggested by IntelliSense.So I think your decision is not impartial and representative.I see many similar answering on Stack and it is OK.Anyway I use my solution and maybe there are some people would choose my solution in the future,but these negative points make it harder to find.Most of all it is correct and not copy.
– Bronek
Dec 10 '12 at 3:20
2
@Bronek If you don't ping me I get no indication that you replied. I did not delete your comment I do not have the ability or want to do so. Likely a mod came by and deleted it - you're welcome to flag it for moderator attention and ask why or better yet - ask on Meta Stack Overflow. I have an opinion about your solution from a programming stand point which is perfectly in my right - this is what comments are for to begin with, no need to take it personal.
– Benjamin Gruenbaum
Aug 7 '13 at 14:45
add a comment |
You can do this by implementing an Extension Method to your defined enum type:
public static class MyExtensions
public static int getNumberValue(this Question questionThis)
return (int)questionThis;
This simplify getting int value of current enum value:
Question question = Question.Role;
int value = question.getNumberValue();
or
int value = Question.Role.getNumberValue();
You can do this by implementing an Extension Method to your defined enum type:
public static class MyExtensions
public static int getNumberValue(this Question questionThis)
return (int)questionThis;
This simplify getting int value of current enum value:
Question question = Question.Role;
int value = question.getNumberValue();
or
int value = Question.Role.getNumberValue();
edited Dec 9 '12 at 22:51
Blachshma
14.9k44061
14.9k44061
answered Dec 9 '12 at 22:09
BronekBronek
6,62823542
6,62823542
4
Bronek, what you did is make up uninformative syntax through a (non generic btw) extension method that actually takes longer to write. I fail to see how it is better than the original solution by Tetraneutron. Let us not make this into a chat, help is always welcome in stackoverflow and everyone here is here to help. Please take my comment as constructive criticism.
– Benjamin Gruenbaum
Dec 10 '12 at 0:28
2
Benjamin,first of all,why did you delete my comment?I don't understand your decisions-maybe somebody else through the community would agree with my comment.Secondly,my solution wraps Tetraneutron's one and accurately it is easier and less writing because an extension method is suggested by IntelliSense.So I think your decision is not impartial and representative.I see many similar answering on Stack and it is OK.Anyway I use my solution and maybe there are some people would choose my solution in the future,but these negative points make it harder to find.Most of all it is correct and not copy.
– Bronek
Dec 10 '12 at 3:20
2
@Bronek If you don't ping me I get no indication that you replied. I did not delete your comment I do not have the ability or want to do so. Likely a mod came by and deleted it - you're welcome to flag it for moderator attention and ask why or better yet - ask on Meta Stack Overflow. I have an opinion about your solution from a programming stand point which is perfectly in my right - this is what comments are for to begin with, no need to take it personal.
– Benjamin Gruenbaum
Aug 7 '13 at 14:45
add a comment |
4
Bronek, what you did is make up uninformative syntax through a (non generic btw) extension method that actually takes longer to write. I fail to see how it is better than the original solution by Tetraneutron. Let us not make this into a chat, help is always welcome in stackoverflow and everyone here is here to help. Please take my comment as constructive criticism.
– Benjamin Gruenbaum
Dec 10 '12 at 0:28
2
Benjamin,first of all,why did you delete my comment?I don't understand your decisions-maybe somebody else through the community would agree with my comment.Secondly,my solution wraps Tetraneutron's one and accurately it is easier and less writing because an extension method is suggested by IntelliSense.So I think your decision is not impartial and representative.I see many similar answering on Stack and it is OK.Anyway I use my solution and maybe there are some people would choose my solution in the future,but these negative points make it harder to find.Most of all it is correct and not copy.
– Bronek
Dec 10 '12 at 3:20
2
@Bronek If you don't ping me I get no indication that you replied. I did not delete your comment I do not have the ability or want to do so. Likely a mod came by and deleted it - you're welcome to flag it for moderator attention and ask why or better yet - ask on Meta Stack Overflow. I have an opinion about your solution from a programming stand point which is perfectly in my right - this is what comments are for to begin with, no need to take it personal.
– Benjamin Gruenbaum
Aug 7 '13 at 14:45
4
4
Bronek, what you did is make up uninformative syntax through a (non generic btw) extension method that actually takes longer to write. I fail to see how it is better than the original solution by Tetraneutron. Let us not make this into a chat, help is always welcome in stackoverflow and everyone here is here to help. Please take my comment as constructive criticism.
– Benjamin Gruenbaum
Dec 10 '12 at 0:28
Bronek, what you did is make up uninformative syntax through a (non generic btw) extension method that actually takes longer to write. I fail to see how it is better than the original solution by Tetraneutron. Let us not make this into a chat, help is always welcome in stackoverflow and everyone here is here to help. Please take my comment as constructive criticism.
– Benjamin Gruenbaum
Dec 10 '12 at 0:28
2
2
Benjamin,first of all,why did you delete my comment?I don't understand your decisions-maybe somebody else through the community would agree with my comment.Secondly,my solution wraps Tetraneutron's one and accurately it is easier and less writing because an extension method is suggested by IntelliSense.So I think your decision is not impartial and representative.I see many similar answering on Stack and it is OK.Anyway I use my solution and maybe there are some people would choose my solution in the future,but these negative points make it harder to find.Most of all it is correct and not copy.
– Bronek
Dec 10 '12 at 3:20
Benjamin,first of all,why did you delete my comment?I don't understand your decisions-maybe somebody else through the community would agree with my comment.Secondly,my solution wraps Tetraneutron's one and accurately it is easier and less writing because an extension method is suggested by IntelliSense.So I think your decision is not impartial and representative.I see many similar answering on Stack and it is OK.Anyway I use my solution and maybe there are some people would choose my solution in the future,but these negative points make it harder to find.Most of all it is correct and not copy.
– Bronek
Dec 10 '12 at 3:20
2
2
@Bronek If you don't ping me I get no indication that you replied. I did not delete your comment I do not have the ability or want to do so. Likely a mod came by and deleted it - you're welcome to flag it for moderator attention and ask why or better yet - ask on Meta Stack Overflow. I have an opinion about your solution from a programming stand point which is perfectly in my right - this is what comments are for to begin with, no need to take it personal.
– Benjamin Gruenbaum
Aug 7 '13 at 14:45
@Bronek If you don't ping me I get no indication that you replied. I did not delete your comment I do not have the ability or want to do so. Likely a mod came by and deleted it - you're welcome to flag it for moderator attention and ask why or better yet - ask on Meta Stack Overflow. I have an opinion about your solution from a programming stand point which is perfectly in my right - this is what comments are for to begin with, no need to take it personal.
– Benjamin Gruenbaum
Aug 7 '13 at 14:45
add a comment |
How about a extension method instead:
public static class ExtensionMethods
public static int IntValue(this Enum argEnum)
return Convert.ToInt32(argEnum);
And the usage is slightly prettier:
var intValue = Question.Role.IntValue();
add a comment |
How about a extension method instead:
public static class ExtensionMethods
public static int IntValue(this Enum argEnum)
return Convert.ToInt32(argEnum);
And the usage is slightly prettier:
var intValue = Question.Role.IntValue();
add a comment |
How about a extension method instead:
public static class ExtensionMethods
public static int IntValue(this Enum argEnum)
return Convert.ToInt32(argEnum);
And the usage is slightly prettier:
var intValue = Question.Role.IntValue();
How about a extension method instead:
public static class ExtensionMethods
public static int IntValue(this Enum argEnum)
return Convert.ToInt32(argEnum);
And the usage is slightly prettier:
var intValue = Question.Role.IntValue();
answered Apr 21 '14 at 2:51
SixOThreeSixOThree
4481819
4481819
add a comment |
add a comment |
My fav hack with int or smaller enums:
GetHashCode();
For a enum
public enum Test
Min = Int32.MinValue,
One = 1,
Max = Int32.MaxValue,
this
var values = Enum.GetValues(typeof(Test));
foreach (var val in values)
Console.WriteLine(val.GetHashCode());
Console.WriteLine(((int)val));
Console.WriteLine(val);
outputs
one
1
1
max
2147483647
2147483647
min
-2147483648
-2147483648
Disclaimer:
Doesn't work for enums based on long
add a comment |
My fav hack with int or smaller enums:
GetHashCode();
For a enum
public enum Test
Min = Int32.MinValue,
One = 1,
Max = Int32.MaxValue,
this
var values = Enum.GetValues(typeof(Test));
foreach (var val in values)
Console.WriteLine(val.GetHashCode());
Console.WriteLine(((int)val));
Console.WriteLine(val);
outputs
one
1
1
max
2147483647
2147483647
min
-2147483648
-2147483648
Disclaimer:
Doesn't work for enums based on long
add a comment |
My fav hack with int or smaller enums:
GetHashCode();
For a enum
public enum Test
Min = Int32.MinValue,
One = 1,
Max = Int32.MaxValue,
this
var values = Enum.GetValues(typeof(Test));
foreach (var val in values)
Console.WriteLine(val.GetHashCode());
Console.WriteLine(((int)val));
Console.WriteLine(val);
outputs
one
1
1
max
2147483647
2147483647
min
-2147483648
-2147483648
Disclaimer:
Doesn't work for enums based on long
My fav hack with int or smaller enums:
GetHashCode();
For a enum
public enum Test
Min = Int32.MinValue,
One = 1,
Max = Int32.MaxValue,
this
var values = Enum.GetValues(typeof(Test));
foreach (var val in values)
Console.WriteLine(val.GetHashCode());
Console.WriteLine(((int)val));
Console.WriteLine(val);
outputs
one
1
1
max
2147483647
2147483647
min
-2147483648
-2147483648
Disclaimer:
Doesn't work for enums based on long
edited Jul 17 '15 at 13:47
answered Jun 26 '15 at 16:51
Erik KarlssonErik Karlsson
159111
159111
add a comment |
add a comment |
public enum Suit : int
Spades = 0,
Hearts = 1,
Clubs = 2,
Diamonds = 3
Console.WriteLine((int)(Suit)Enum.Parse(typeof(Suit), "Clubs"));
//from int
Console.WriteLine((Suit)1);
//From number you can also
Console.WriteLine((Suit)Enum.ToObject(typeof(Suit), 1));
if (typeof(Suit).IsEnumDefined("Spades"))
var res = (int)(Suit)Enum.Parse(typeof(Suit), "Spades");
Console.Out.WriteLine("0", res);
add a comment |
public enum Suit : int
Spades = 0,
Hearts = 1,
Clubs = 2,
Diamonds = 3
Console.WriteLine((int)(Suit)Enum.Parse(typeof(Suit), "Clubs"));
//from int
Console.WriteLine((Suit)1);
//From number you can also
Console.WriteLine((Suit)Enum.ToObject(typeof(Suit), 1));
if (typeof(Suit).IsEnumDefined("Spades"))
var res = (int)(Suit)Enum.Parse(typeof(Suit), "Spades");
Console.Out.WriteLine("0", res);
add a comment |
public enum Suit : int
Spades = 0,
Hearts = 1,
Clubs = 2,
Diamonds = 3
Console.WriteLine((int)(Suit)Enum.Parse(typeof(Suit), "Clubs"));
//from int
Console.WriteLine((Suit)1);
//From number you can also
Console.WriteLine((Suit)Enum.ToObject(typeof(Suit), 1));
if (typeof(Suit).IsEnumDefined("Spades"))
var res = (int)(Suit)Enum.Parse(typeof(Suit), "Spades");
Console.Out.WriteLine("0", res);
public enum Suit : int
Spades = 0,
Hearts = 1,
Clubs = 2,
Diamonds = 3
Console.WriteLine((int)(Suit)Enum.Parse(typeof(Suit), "Clubs"));
//from int
Console.WriteLine((Suit)1);
//From number you can also
Console.WriteLine((Suit)Enum.ToObject(typeof(Suit), 1));
if (typeof(Suit).IsEnumDefined("Spades"))
var res = (int)(Suit)Enum.Parse(typeof(Suit), "Spades");
Console.Out.WriteLine("0", res);
answered Jul 27 '18 at 6:29
GauravsaGauravsa
3,5381919
3,5381919
add a comment |
add a comment |
Following is the extension method
public static string ToEnumString<TEnum>(this int enumValue)
var enumString = enumValue.ToString();
if (Enum.IsDefined(typeof(TEnum), enumValue))
enumString = ((TEnum) Enum.ToObject(typeof (TEnum), enumValue)).ToString();
return enumString;
add a comment |
Following is the extension method
public static string ToEnumString<TEnum>(this int enumValue)
var enumString = enumValue.ToString();
if (Enum.IsDefined(typeof(TEnum), enumValue))
enumString = ((TEnum) Enum.ToObject(typeof (TEnum), enumValue)).ToString();
return enumString;
add a comment |
Following is the extension method
public static string ToEnumString<TEnum>(this int enumValue)
var enumString = enumValue.ToString();
if (Enum.IsDefined(typeof(TEnum), enumValue))
enumString = ((TEnum) Enum.ToObject(typeof (TEnum), enumValue)).ToString();
return enumString;
Following is the extension method
public static string ToEnumString<TEnum>(this int enumValue)
var enumString = enumValue.ToString();
if (Enum.IsDefined(typeof(TEnum), enumValue))
enumString = ((TEnum) Enum.ToObject(typeof (TEnum), enumValue)).ToString();
return enumString;
edited Nov 16 '18 at 6:25
Ashish Kamble
733620
733620
answered Dec 16 '16 at 6:58
Kamran ShahidKamran Shahid
1,65122545
1,65122545
add a comment |
add a comment |
The example I would like to suggest 'to get 'int' value from enum is,'
public enum Sample
Book =1, Pen=2, Pencil =3
int answer = (int)Sample.Book;
now the answer will be 1.
I hope this might help someone.
add a comment |
The example I would like to suggest 'to get 'int' value from enum is,'
public enum Sample
Book =1, Pen=2, Pencil =3
int answer = (int)Sample.Book;
now the answer will be 1.
I hope this might help someone.
add a comment |
The example I would like to suggest 'to get 'int' value from enum is,'
public enum Sample
Book =1, Pen=2, Pencil =3
int answer = (int)Sample.Book;
now the answer will be 1.
I hope this might help someone.
The example I would like to suggest 'to get 'int' value from enum is,'
public enum Sample
Book =1, Pen=2, Pencil =3
int answer = (int)Sample.Book;
now the answer will be 1.
I hope this might help someone.
answered Aug 3 '15 at 7:12
VivekVivek
62210
62210
add a comment |
add a comment |
Since enums can be declared with multiple primitive types, a generic extension method to cast any enum type can be useful.
enum Box
HEIGHT,
WIDTH,
DEPTH
public static void UseEnum()
int height = Box.HEIGHT.GetEnumValue<int>();
int width = Box.WIDTH.GetEnumValue<int>();
int depth = Box.DEPTH.GetEnumValue<int>();
public static T GetEnumValue<T>(this object e) => (T)e;
add a comment |
Since enums can be declared with multiple primitive types, a generic extension method to cast any enum type can be useful.
enum Box
HEIGHT,
WIDTH,
DEPTH
public static void UseEnum()
int height = Box.HEIGHT.GetEnumValue<int>();
int width = Box.WIDTH.GetEnumValue<int>();
int depth = Box.DEPTH.GetEnumValue<int>();
public static T GetEnumValue<T>(this object e) => (T)e;
add a comment |
Since enums can be declared with multiple primitive types, a generic extension method to cast any enum type can be useful.
enum Box
HEIGHT,
WIDTH,
DEPTH
public static void UseEnum()
int height = Box.HEIGHT.GetEnumValue<int>();
int width = Box.WIDTH.GetEnumValue<int>();
int depth = Box.DEPTH.GetEnumValue<int>();
public static T GetEnumValue<T>(this object e) => (T)e;
Since enums can be declared with multiple primitive types, a generic extension method to cast any enum type can be useful.
enum Box
HEIGHT,
WIDTH,
DEPTH
public static void UseEnum()
int height = Box.HEIGHT.GetEnumValue<int>();
int width = Box.WIDTH.GetEnumValue<int>();
int depth = Box.DEPTH.GetEnumValue<int>();
public static T GetEnumValue<T>(this object e) => (T)e;
edited Nov 16 '18 at 6:49
Ashish Kamble
733620
733620
answered Dec 6 '17 at 5:14
Jeffrey FerreirasJeffrey Ferreiras
1656
1656
add a comment |
add a comment |
The easiest solution I can think of is overloading the Get(int)
method like this:
[modifiers] Questions Get(Question q)
return Get((int)q);
where [modifiers]
can generally be same as for Get(int)
method. If You can't edit the Questions
class or for some reason don't want to, You can overload the method by writing an extension:
public static class Extensions
public static Questions Get(this Questions qs, Question q)
return qs.Get((int)q);
add a comment |
The easiest solution I can think of is overloading the Get(int)
method like this:
[modifiers] Questions Get(Question q)
return Get((int)q);
where [modifiers]
can generally be same as for Get(int)
method. If You can't edit the Questions
class or for some reason don't want to, You can overload the method by writing an extension:
public static class Extensions
public static Questions Get(this Questions qs, Question q)
return qs.Get((int)q);
add a comment |
The easiest solution I can think of is overloading the Get(int)
method like this:
[modifiers] Questions Get(Question q)
return Get((int)q);
where [modifiers]
can generally be same as for Get(int)
method. If You can't edit the Questions
class or for some reason don't want to, You can overload the method by writing an extension:
public static class Extensions
public static Questions Get(this Questions qs, Question q)
return qs.Get((int)q);
The easiest solution I can think of is overloading the Get(int)
method like this:
[modifiers] Questions Get(Question q)
return Get((int)q);
where [modifiers]
can generally be same as for Get(int)
method. If You can't edit the Questions
class or for some reason don't want to, You can overload the method by writing an extension:
public static class Extensions
public static Questions Get(this Questions qs, Question q)
return qs.Get((int)q);
edited Jan 28 '13 at 14:09
answered Jan 28 '13 at 13:52
Grx70Grx70
7,41112541
7,41112541
add a comment |
add a comment |
Try this one instead of convert enum to int:
public static class ReturnType
public static readonly int Success = 1;
public static readonly int Duplicate = 2;
public static readonly int Error = -1;
add a comment |
Try this one instead of convert enum to int:
public static class ReturnType
public static readonly int Success = 1;
public static readonly int Duplicate = 2;
public static readonly int Error = -1;
add a comment |
Try this one instead of convert enum to int:
public static class ReturnType
public static readonly int Success = 1;
public static readonly int Duplicate = 2;
public static readonly int Error = -1;
Try this one instead of convert enum to int:
public static class ReturnType
public static readonly int Success = 1;
public static readonly int Duplicate = 2;
public static readonly int Error = -1;
answered Jan 14 '14 at 20:28
Nalan MadheswaranNalan Madheswaran
4,97213124
4,97213124
add a comment |
add a comment |
In Vb. It should be
Public Enum Question
Role = 2
ProjectFunding = 3
TotalEmployee = 4
NumberOfServers = 5
TopBusinessConcern = 6
End Enum
Private value As Integer = CInt(Question.Role)
The question is for C#.
– Ctrl S
Nov 19 '18 at 13:37
add a comment |
In Vb. It should be
Public Enum Question
Role = 2
ProjectFunding = 3
TotalEmployee = 4
NumberOfServers = 5
TopBusinessConcern = 6
End Enum
Private value As Integer = CInt(Question.Role)
The question is for C#.
– Ctrl S
Nov 19 '18 at 13:37
add a comment |
In Vb. It should be
Public Enum Question
Role = 2
ProjectFunding = 3
TotalEmployee = 4
NumberOfServers = 5
TopBusinessConcern = 6
End Enum
Private value As Integer = CInt(Question.Role)
In Vb. It should be
Public Enum Question
Role = 2
ProjectFunding = 3
TotalEmployee = 4
NumberOfServers = 5
TopBusinessConcern = 6
End Enum
Private value As Integer = CInt(Question.Role)
answered Apr 12 '16 at 7:09
VPPVPP
2701420
2701420
The question is for C#.
– Ctrl S
Nov 19 '18 at 13:37
add a comment |
The question is for C#.
– Ctrl S
Nov 19 '18 at 13:37
The question is for C#.
– Ctrl S
Nov 19 '18 at 13:37
The question is for C#.
– Ctrl S
Nov 19 '18 at 13:37
add a comment |
I a bit late to the game but I came up with this extension method that includes current language features. By using dynamic, I don't need to make this a generic method and specify the type which keeps the invocation simpler and consistent. Please let me know if I've done something wrong:
public static class EnumEx
{
public static dynamic Value(this Enum e)
switch (e.GetTypeCode())
case TypeCode.Byte:
return (byte) (IConvertible) e;
case TypeCode.Int16:
return (short) (IConvertible) e;
case TypeCode.Int32:
return (int) (IConvertible) e;
case TypeCode.Int64:
return (long) (IConvertible) e;
case TypeCode.UInt16:
return (ushort) (IConvertible) e;
case TypeCode.UInt32:
return (uint) (IConvertible) e;
case TypeCode.UInt64:
return (ulong) (IConvertible) e;
case TypeCode.SByte:
return (sbyte) (IConvertible) e;
return 0;
add a comment |
I a bit late to the game but I came up with this extension method that includes current language features. By using dynamic, I don't need to make this a generic method and specify the type which keeps the invocation simpler and consistent. Please let me know if I've done something wrong:
public static class EnumEx
{
public static dynamic Value(this Enum e)
switch (e.GetTypeCode())
case TypeCode.Byte:
return (byte) (IConvertible) e;
case TypeCode.Int16:
return (short) (IConvertible) e;
case TypeCode.Int32:
return (int) (IConvertible) e;
case TypeCode.Int64:
return (long) (IConvertible) e;
case TypeCode.UInt16:
return (ushort) (IConvertible) e;
case TypeCode.UInt32:
return (uint) (IConvertible) e;
case TypeCode.UInt64:
return (ulong) (IConvertible) e;
case TypeCode.SByte:
return (sbyte) (IConvertible) e;
return 0;
add a comment |
I a bit late to the game but I came up with this extension method that includes current language features. By using dynamic, I don't need to make this a generic method and specify the type which keeps the invocation simpler and consistent. Please let me know if I've done something wrong:
public static class EnumEx
{
public static dynamic Value(this Enum e)
switch (e.GetTypeCode())
case TypeCode.Byte:
return (byte) (IConvertible) e;
case TypeCode.Int16:
return (short) (IConvertible) e;
case TypeCode.Int32:
return (int) (IConvertible) e;
case TypeCode.Int64:
return (long) (IConvertible) e;
case TypeCode.UInt16:
return (ushort) (IConvertible) e;
case TypeCode.UInt32:
return (uint) (IConvertible) e;
case TypeCode.UInt64:
return (ulong) (IConvertible) e;
case TypeCode.SByte:
return (sbyte) (IConvertible) e;
return 0;
I a bit late to the game but I came up with this extension method that includes current language features. By using dynamic, I don't need to make this a generic method and specify the type which keeps the invocation simpler and consistent. Please let me know if I've done something wrong:
public static class EnumEx
{
public static dynamic Value(this Enum e)
switch (e.GetTypeCode())
case TypeCode.Byte:
return (byte) (IConvertible) e;
case TypeCode.Int16:
return (short) (IConvertible) e;
case TypeCode.Int32:
return (int) (IConvertible) e;
case TypeCode.Int64:
return (long) (IConvertible) e;
case TypeCode.UInt16:
return (ushort) (IConvertible) e;
case TypeCode.UInt32:
return (uint) (IConvertible) e;
case TypeCode.UInt64:
return (ulong) (IConvertible) e;
case TypeCode.SByte:
return (sbyte) (IConvertible) e;
return 0;
answered Mar 2 at 17:55
JeffJeff
114110
114110
add a comment |
add a comment |
Try this :
int value = YourEnum.ToString("D");
add a comment |
Try this :
int value = YourEnum.ToString("D");
add a comment |
Try this :
int value = YourEnum.ToString("D");
Try this :
int value = YourEnum.ToString("D");
edited Oct 23 '13 at 7:47
bluish
14.2k1694149
14.2k1694149
answered Jan 10 '13 at 7:37
CarynCaryn
11
11
add a comment |
add a comment |
protected by Robert Levy Jul 17 '15 at 13:59
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
24
For the other way around: cast-int-to-enum-in-c-sharp.
– nawfal
Jun 9 '13 at 11:54
6
I know I'm late to the party, but instead of defining your method as
get(int foo)
you can define it asget(Question foo)
then do your casting inside the method, the you can call your method asQuestions.Get(Question.Role)
– Joe
Feb 7 '17 at 15:10