Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Jenosavel · Apr 02, 2015 at 12:38 PM · intenumcastingcomparisonbyte

Can't compare byte to byte?

I would like to use an enum for some bitmask flags, along the lines of:

 enum myFlags : byte {
 
 flagOne =   1 << 0,
 flagTwo =   1 << 1,
 flagThree = 1 << 2
 
 }

And then compare these flags against other byte variables such as:

 byte myValue = 1 << 1;

 byte someResult = (myValue & myFlags.flagOne);

However I consistently keep running into casting errors. Either "cannot compare type 'byte' and type 'myFlags'", or when I got frustrated and tried:

 byte someResult = (myValue & (1 << 0));

I then get "cannot compare type 'byte' and 'int'"

How should one go about this sort of thing in Unity's flavor of C#? I admit, what experience I have with C is all C++, but needing to re-cast all your byte variables to byte every time you try to use them seems ridiculously wrong. What's going on here?

Comment
Add comment · Show 2
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Owen-Reynolds · Apr 02, 2015 at 02:30 PM 0
Share

"Unity's flavor of C#": that might be the confusion. C# just doesn't like bytes as much as program$$anonymous$$g languages for adults. I believe 1<<3 is an int. And enums don't enjoy implicits casts to ints/bytes in C# as much as they could.

Just looking at standard C# types and conversion rules should help solve this.

avatar image Jenosavel · Apr 02, 2015 at 02:52 PM 0
Share

Thanks for pointing me at where to look. Do you happen to know if something like this winds up as an int as well?

 byte someValue = 1;

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by POiD · Apr 02, 2015 at 02:58 PM

I am comparing bytes against my enums, all you have to do is cast them.

byte testByte = (byte)MyEnum.firstValue;

if (testByte == (byte)MyEnum.secondValue) ....

Works for me in C#.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image
0

Answer by DiegoSLTS · Apr 02, 2015 at 03:29 PM

I'm not sure why you want things to be bytes, but even if you define the enum to be a bytes enum, the conversion is never implicit, you have to cast the value if you want to assign it to a byte variable.

Anyway, I'd do it differently. First, for enums intended do be used as flags you can use the Flags attribute: http://www.dotnetperls.com/enum-flags

This way you can have a variable of the type of the enum that holds many values of the enum, just like a byte of flags.

And with that enum defined you don't need a byte variable, you can just have a variable of the enum.

 using System;

 ....

 [Flags]
 enum myFlags : byte {
     flagOne = 1 << 0,
     flagTwo = 1 << 1,
     flagThree = 1 << 2
 }

And when you want to use it:

 myFlags myValue = myFlags.flagOne | myFlags.flagTwo;
 Debug.Log (myValue); // "flagOne, flagTwo"
 myFlags someResult = myValue & myFlags.flagOne;
 Debug.Log (someResult); // "flagOne"
 myFlags otherResult = myValue & myFlags.flagThree;
 Debug.Log (otherResult); // "0"
Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

Integer value casting to KeyCode enum in JS? 3 Answers

Directly accessing enum types from other scripts (javascript) 0 Answers

comparing enum from a class in an editor script doesn't work 2 Answers

Comparing enums and ints (javascript) 1 Answer

Why can't I animate an int or enum? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges