iT邦幫忙

1

將C語言的語法概念帶入C#發生問題 (Define問題 資料長度問題)

小弟之前是以MCU(STM32)開始的
最近學習C#中
但遇到一些小問題

  1. 我想將C語言中的 #difine 帶入C#中
    似乎不能指派一個值給被Define的關鍵字
   #define a 0x00000001
   #define b 0x00000002
   #define b 0x00000004

以上被直接認定為ERROR
我想製作一個,32位元的a 其值 為1
請問各位有建議怎麼做呢?(要是不可變的常數)
2. 上一個方法不行後,我想說以enum 來做

    enum enum_abc  //狀態座標
    {
        a = 0x00000001,
        b = 0x00000002,
        c = 0x00000004,
    }
    private UInt32 System_Status = 0; //系統狀態旗標

.
以上邊是OK的,但是後續要使用時卻發生了問題

    if(System_Status& enum_abc.c)     //如果c旗標舉起
    {
        System_Status &= ~enum_abc.a; //放下a旗標
        System_Status |= enum_abc.b;  //舉起b旗標
    }

.
以上的 if判斷, 放下旗標, 舉起旗標 全都錯誤
請問各位,在C#時,各位比較常用的控制旗標的方法

fillano iT邦超人 1 級 ‧ 2020-03-18 11:00:34 檢舉
https://docs.microsoft.com/zh-tw/dotnet/csharp/language-reference/builtin-types/enum
0
海綿寶寶
iT邦大神 1 級 ‧ 2020-03-18 14:41:48
最佳解答
lazywayne iT邦新手 5 級 ‧ 2020-03-18 16:22:19 檢舉

OK 以const 開頭即可
之後應該會慢慢習慣

1
打狗松鼠
iT邦新手 5 級 ‧ 2020-03-18 13:48:11
  1. 我想將C語言中的 #difine 帶入C#中
    似乎不能指派一個值給被Define的關鍵字

微軟官方文件說明:C#中的#define並不像C/C++一樣,在C#中#define是用來搭配#if

  1. 上一個方法不行後,我想說以enum 來做

想法是好的,但一樣只適用於C/C++
在C#,Compiler並不會直接將int轉型為bool做判斷,也就不能使用邏輯運算子來串接

這部份的話,建議你先弄懂C#變數與資料型態C#運算子

2020/03/18 13:50補充
如果急用,建議的寫法在官方文件有提到:官方文件參考

看更多先前的回應...收起先前的回應...
fillano iT邦超人 1 級 ‧ 2020-03-18 14:16:59 檢舉

他是要做位元(bitwise)運算吧?and/or/xor/shift等等。

lazywayne iT邦新手 5 級 ‧ 2020-03-18 16:21:06 檢舉

恩對,我想給他做位元運算
這招對於一堆旗標很好用

lazywayne iT邦新手 5 級 ‧ 2020-03-18 17:06:42 檢舉

不過後來我發現C#裡面可以直接用bool
以前寫MCU最小單位是8bit的
一時沒反應過來

For fillano:
在補充的官方文件有寫到,C#支援列舉使用位元來定義並可進行位元運算。全程皆可僅使用列舉,程式碼的可維護性也較高(運用得當的話)

0
CWKSC
iT邦新手 5 級 ‧ 2020-03-18 14:55:25
const
// or 
static readonly

我要發表回答

立即登入回答