C#中Enum用法小結

来源:https://www.cnblogs.com/liujianshe1990-/archive/2019/01/10/10247930.html
-Advertisement-
Play Games

enums枚舉是值類型,數據直接存儲在棧中,而不是使用引用和真實數據的隔離方式來存儲。 (1)預設情況下,枚舉中的第一個變數被賦值為0,其他的變數的值按定義的順序來遞增(0,12,3...),因此以下兩個代碼定義是等價的: enum TrafficLight { Green, Yellow, Red ...


enums枚舉是值類型,數據直接存儲在棧中,而不是使用引用和真實數據的隔離方式來存儲。

(1)預設情況下,枚舉中的第一個變數被賦值為0,其他的變數的值按定義的順序來遞增(0,12,3...),因此以下兩個代碼定義是等價的:

 enum TrafficLight  

{  

 Green,  

 Yellow,  

 Red  

}   

 enum TrafficLight  

{  

 Green = 0,  

 Yellow = 1,  

Red = 2  

}  


(2)enum枚舉類型的變數的名字不能相同,但是值可以相同,例如:

 enum TrafficLight  

{  

Green = 0,  

Yellow = 1,     // Duplicate value, OK   

Red = 1         // Duplicate value, OK   

}  

(3)如果enum中的部分成員顯式定義了值,而部分沒有;那麼沒有定義值的成員還是會按照上一個成員的值來遞增賦值,例如:

 enum LoopType  

{  

  None,          // value is 0    

 Daily,         // value is 1    

 Weekly = 7,  

 Monthly,       // value is 8    

Yeayly,        // value is 9    

  DayGap = 15,           

  WeekGap,       // value is 16    

 MonthGap,      // value is 17    

YearGap        // value is 18    

}  

(4)enum枚舉成員可以用來作為位標誌,同時支持位的操作(位與,位或等等),例如:

 

 enum CardDeckSettings : uint  

{  

 SingleDeck = 0x01,      // Bit 0  

 LargePictures = 0x02,   // Bit 1  

FancyNumbers = 0x04,    // Bit 2  

Animation = 0x08        // Bit 3      

}  

十六進位數的一個作用就是用來進行位運算和操作,很方便。

 

 

1. 枚舉(enum type)通常用來表示一組常量。由於枚舉是強類型的,這在編程中給我們提供了極大的方便。

2. 枚舉的定義:

 public enum Sex
        {
            男 = 0,
            女 = 1
        }

或者:如果只給男賦值,那麼女=1

 public enum Sex
        {
            男 = 0,
            女 
        }

 

枚舉在軟體開發中的使用場景

在資料庫設計人員表(person)時有性別欄位Sex(0代表男,1代表女),我們一般用bit或者int類型表示。

1.在編程時我們給Sex欄位賦值的方式為:

1).  Sex=0;

2).  Sex=(int)SexEnum.Man;

其中SexEnum為定義性別的枚舉類型,我們可以看出第二種方式的可讀性更強。

2.在編程時我們,如果Sex欄位作為一個搜索條件的話,我們可能需要以下拉選擇的方式展現所有可以選擇的情況。那麼我們就需要將SexEnum轉換成一個字典集合然後綁定到對應的select標簽,具體怎麼實現請看下麵的示例代碼。

………………………………

enum、int、string三種類型之間的互轉

執行結果如下:

獲取描述信息

 修改枚舉如下:

獲取描述信息代碼如下:

列印結果如下:

 

枚舉轉換成字典集合的通用方法

1.這裡我就直接列舉代碼如下:

複製代碼 複製代碼
 public static class EnumHelper
    {
        /// <summary>
        /// 根據枚舉的值獲取枚舉名稱
        /// </summary>
        /// <typeparam name="T">枚舉類型</typeparam>
        /// <param name="status">枚舉的值</param>
        /// <returns></returns>
        public static string GetEnumName<T>(this int status)
        {
            return Enum.GetName(typeof(T), status);
        }
        /// <summary>
        /// 獲取枚舉名稱集合
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static string[] GetNamesArr<T>()
        {
            return Enum.GetNames(typeof(T));
        }
        /// <summary>
        /// 將枚舉轉換成字典集合
        /// </summary>
        /// <typeparam name="T">枚舉類型</typeparam>
        /// <returns></returns>
        public static Dictionary<string, int> getEnumDic<T>()
        {

            Dictionary<string, int> resultList = new Dictionary<string, int>();
            Type type = typeof(T);
            var strList = GetNamesArr<T>().ToList();
            foreach (string key in strList)
            {
                string val = Enum.Format(type, Enum.Parse(type, key), "d");
                resultList.Add(key, int.Parse(val));
            }
            return resultList;
        }
        /// <summary>
        /// 將枚舉轉換成字典
        /// </summary>
        /// <typeparam name="TEnum"></typeparam>
        /// <returns></returns>
        public static Dictionary<string, int> GetDic<TEnum>()
        {
            Dictionary<string, int> dic = new Dictionary<string, int>();
            Type t = typeof(TEnum);
            var arr = Enum.GetValues(t);
            foreach (var item in arr)
            {
                dic.Add(item.ToString(), (int)item);
            }

            return dic;
        }

    }
複製代碼 複製代碼 複製代碼 複製代碼
  public enum Sex
    {
        man,
        woman
    }
    public enum Color
    {
        red,
        blue
    }
複製代碼 複製代碼

 

使用方法如下:

複製代碼 複製代碼
 static void Main(string[] args)
        {
            var name = EnumHelper.GetEnumName<Sex>(1);
            Console.WriteLine("數字轉字元串:"+name);
            var dic1 = EnumHelper.getEnumDic<Sex>();
            Console.WriteLine("枚舉轉字典集合方法1:");
            foreach (var item in dic1)
            {
                Console.WriteLine(item.Key + "==" + item.Value);
            }
            Console.WriteLine("枚舉轉字典集合方法2:");
            var dic= EnumHelper.GetDic<Color>();
            foreach (var item in dic)
            {
                Console.WriteLine(item.Key+"=="+item.Value);
            }
            Console.ReadLine();
        }
複製代碼 複製代碼

 
轉:https://www.cnblogs.com/eggTwo/p/5950131.html


C# enum枚舉 枚舉類 很全的枚舉說明和使用

 


  枚舉類型聲明為一組相關的符號常數定義了一個類型名稱。枚舉用於“多項選擇”場合,就是程式運行時從編譯時已經設定的固定數目的“選擇”中做出決定。

  枚舉類型(也稱為枚舉)為定義一組可以賦給變數的命名整數常量提供了一種有效的方法。例如,假設您必須定義一個變數,該變數的值表示一周中的一天。該變數只能存儲七個有意義的值。若要定義這些值,可以使用枚舉類型。枚舉類型是使用 enum 關鍵字聲明的。 

enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

預設情況下,枚舉中每個元素的基礎類型是 int。可以使用冒號指定另一種整數值類型。
如果不為枚舉數列表中的元素指定值,則它們的值將以 1 為增量自動遞增。在前面的示例中,Days.Sunday 的值為 0,Days.Monday 的值為 1,依此類推。創建新的 Days 對象時,如果不顯式為其賦值,則它將具有預設值 Days.Sunday (0)。創建枚舉時,應選擇最合理的預設值並賦給它一個零值。這便使得只要在創建枚舉時未為其顯式賦值,則所創建的全部枚舉都將具有該預設值。枚舉中大小寫敏感,但是建議不要這樣。

枚舉的優點:
<1>枚舉可以使代碼更易於維護,有助於確保給變數指定合法的、期望的值。

<2>枚舉使代碼更清晰,允許用描述性的名稱表示整數值,而不是用含義模糊的數來表示。

<3>枚舉使代碼更易於鍵入。在給枚舉類型的實例賦值時,VS.NET IDE會通過IntelliSense彈出一個包含可接受值的列表框,減少了按鍵次數,並能夠讓我們回憶起可能的值

枚舉實例

  聲明: 



public enum TimeOfDay
{
    Moning = 0,
    Afternoon = 1,
    Evening = 2,
};


  使用: 



    public string getTimeOfDay(TimeOfDay time)
    {
        string result = string.Empty;
        switch (time)
        {
            case TimeOfDay.Moning:
                result = "上午";
                break;
            case TimeOfDay.Afternoon:
                result = "下午";
                break;
            case TimeOfDay.Evening:
                result = "晚上";
                break;
            default:
                result = "未知";
                break;
        }
        return result;
    }


枚舉方法 



  <1>獲取枚舉字元串



TimeOfDay time = TimeOfDay.Afternoon;

Console.WriteLine(time.ToString());//輸出:Afternoon





  <2>Enum.Parse()方法。這個方法帶3個參數,第一個參數是要使用的枚舉類型。其語法是關鍵字typeof後跟放在括弧中的枚舉類名。typeof運算符將在第5章詳細論述。第二個參數是要轉換的字元串,第三個參數是一個bool,指定在進行轉換時是否忽略大小寫。最後,註意Enum.Parse()方法實際上返回一個對象引用—— 我們需要把這個字元串顯式轉換為需要的枚舉類型(這是一個取消裝箱操作的例子)。對於上面的代碼,將返回1,作為一個對象,對應於TimeOfDay.Afternoon的枚舉值。在顯式轉換為int時,會再次生成1。



TimeOfDay time2 = (TimeOfDay) Enum.Parse(typeof(TimeOfDay), "afternoon", true);

Console.WriteLine((int)time2);//輸出1







  <3>得到枚舉的某一值對應的名稱

lbOne.Text = Enum.GetName(typeof(TimeOfDay), 0);
    <4>得到枚舉的所有的值 

foreach (int i in Enum.GetValues(typeof(TimeOfDay)))
            lbValues.Text += i.ToString();
    <5>枚舉所有的名稱 

foreach(string temp in Enum.GetNames(typeof(TimeOfDay)))
            lbNames.Text+=temp;
  

枚舉和常量



  優先考慮枚舉。

  在C#中,枚舉的真正強大之處是它們在後臺會實例化為派生於基類System.Enum的結構。這表示可以對它們調用方法,執行有用的任務。註意因為.NET Framework的執行方式,在語法上把枚舉當做結構是不會有性能損失的。實際上,一旦代碼編譯好,枚舉就成為基本類型,與int和float類似。

  但是在實際應用中,你也許會發現,我們經常用英語定義枚舉類型,因為開發工具本來就是英文開發的,美國人用起來,就直接能夠明白枚舉類型的含義。其實,我們在開發的時候就多了一步操作,需要對枚舉類型進行翻譯。沒辦法,誰讓編程語言是英語寫的,如果是漢語寫的,那我們也就不用翻譯了,用起枚舉變得很方便了。舉個簡單的例子,TimeOfDay.Morning一看到Morning,美國人就知道是上午,但是對於中國的使用者來說,可能有很多人就看不懂,這就需要我們進行翻譯、解釋,就向上面的getTimeOfDay()的方法,其實就是做了翻譯工作。所以,在使用枚舉的時候,感覺到並不是很方便,有的時候我們還是比較樂意創建常量,然後在類中,聲明一個集合來容納常量和其意義。

  使用常量定義:這種方法固然可行,但是不能保證傳入的參數day就是實際限定的。



using System;
using System.Collections.Generic;

public class TimesOfDay
{
    public const int Morning = 0;
    public const int Afternoon = 1;
    public const int Evening = 2;
    public static Dictionary<int, string> list;
    /// <summary>
    /// 獲得星期幾
    /// </summary>
    /// <param name="day"></param>
    /// <returns></returns>
    public static string getTimeNameOfDay(int time)
    {
        if (list == null || list.Count <= 0)
        {
            list = new Dictionary<int, string>();
            list.Add(Morning, "上午");
            list.Add(Afternoon, "下午");
            list.Add(Evening, "晚上");
        }

        return list[time];
    }
}










希望能夠找到一種比較好的方法,將枚舉轉為我們想要的集合。搜尋了半天終於找到了一些線索。通過反射,得到針對某一枚舉類型的描述。

枚舉的定義中加入描述 

using System;
using System.ComponentModel;

public enum TimeOfDay
{
    [Description("上午")]
    Moning,
    [Description("下午")]
    Afternoon,
    [Description("晚上")]
    Evening,
};


  獲得值和表述的鍵值對

        /// <summary>
        /// 從枚舉類型和它的特性讀出並返回一個鍵值對
        /// </summary>
        /// <param name="enumType">Type,該參數的格式為typeof(需要讀的枚舉類型)</param>
        /// <returns>鍵值對</returns>
        public static NameValueCollection GetNVCFromEnumValue(Type enumType)
        {
            NameValueCollection nvc = new NameValueCollection();
            Type typeDescription = typeof(DescriptionAttribute);
            System.Reflection.FieldInfo[] fields = enumType.GetFields();
            string strText = string.Empty;
            string strValue = string.Empty;
            foreach (FieldInfo field in fields)
            {
                if (field.FieldType.IsEnum)
                {
                    strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString();
                    object[] arr = field.GetCustomAttributes(typeDescription, true);
                    if (arr.Length > 0)
                    {
                        DescriptionAttribute aa = (DescriptionAttribute)arr[0];
                        strText = aa.Description;
                    }
                    else
                    {
                        strText = field.Name;
                    }
                    nvc.Add(strText, strValue);
                }
            }
            return nvc;
        }




.NET中Flags枚舉的使用

 .NET中的枚舉我們一般有兩種用法,一是表示唯一的元素序列,例如一周里的各天;還有就是用來表示多種複合的狀態。這個時候一般需要為枚舉加上[Flags]特性標記為位域,例如:




[Flags] 
enum Styles{ 
ShowBorder = 1,         //是否顯示邊框
ShowCaption = 2,        //是否顯示標題
ShowToolbox = 4         //是否顯示工具箱
} 




  這樣我們就可以用"或"運算符組合多個狀態,例如:





myControl.Style = Styles.ShowBorder | Styles.ShowCaption;  




  這時myControl.Style枚舉的值將變成 1+2=3,它的ToString()將變成"Styles.ShowBorder , Styles.ShowCaption" 
這裡我們可以解釋為什麼第三個值ShowToolbox可以為4,5..而不能為3。也就是說它的值不應該是前幾項值的複合值。有一個比較簡單的方法就是用2的n次方來依次為每一項賦值,例如 1,2,4,8,16,32,64..... 

現在舉個常見的Flags應用例子。例如一個簡單的許可權系統,有"Admin"和"User"兩種角色,我們可以在表中放一個 varchar()欄位,以文本形式存放許可權字"Admin,User"。但是用Flags型枚舉的話,我們就可以直接將 Roles.Admin | Roles.User 的值放在一個int欄位里。 

以下是關於枚舉的一些常見操作: 
將枚舉的值變回枚舉對象: 
Styles style = (Styles) Enum.Parse(typeof(Styles), 4 );    // -> style = Styles.Toolbox; 
  檢查枚舉是否包含某個元素: 
bool hasFlag = ((style & Styles.ShowBorder) != 0); 

其實我們還會碰到一種情況,就是需要從組合狀態中去掉一個元素。用"^"運算符可以做到:





Styles style = Styles.ShowBorder | Styles.ShowCaption; 
style = style ^ Styles.ShowBorder; 





  這個時候style的值就會變成 Styles.ShowCaption 

但這裡有一個很嚴重的問題(偶現在才發現) 
我們這個時候再執行一次 
style = style ^ Styles.ShowBorder; 
按照我們的設想,這個時候 style 的值是 Styles.ShowCaption,不包含 Styles.ShowBorder,所以我們就算去掉這個元素,style應該還是不會變。但實際的 style 的值卻又變成了 Styles.ShowBorder | Styles.ShowCaption !! 再執行一遍,又會去掉這個元素,周而複始。 
當然我們可以在去掉某個元素前做一番檢查,如果枚舉包含這個元素,再去掉它:





if ((style & Styles.ShowBorder) != 0){ 
style = style ^ Styles.ShowBorder; 
} 





  不知道有沒有其它方法可以方便地從Flags枚舉狀態中去掉一個元素。。 

  Thanks to mobilebilly: 
style = style & (~Styles.ShowBorder) 可以方便去掉一個元素。



好好利用枚舉

      這段時間手裡有個有關訂單的項目,訂單一般有個狀態的,以前很多要時候都會想到訂單的狀態就那幾個種,就把它寫死吧,不用一個資料庫表了,太浪費資源了,但寫死了用一個數字來代表一種訂單狀態,這樣在編碼時還要記得什麼數字代碼什麼狀態,如果不小心把它寫錯了,會導致數據出錯。
      後來想到.NET有個枚舉,這麼好的東西為何不用上來呢,這不但可以方便以後的代碼維護,也方便編碼。

public enum OrderState
{
    /// <summary>
    /// 無效狀態
    /// </summary>
    Invalid = 0,
    /// <summary>
    /// 客戶詢價
    /// </summary>
    CustomerQuery = 1,
    /// <summary>
    /// 客戶落單
    /// </summary>
    CustomerOrdered = 2,
    /// <summary>
    /// 客戶付款
    /// </summary>
    ReceiverCustomerPayment = 4,
    /// <summary>
    /// 向供貨商訂貨
    /// </summary>
    SupplierOrdered = 8,
    /// <summary>
    /// 供貨商確認貨期
    /// </summary>
    SupplierOrderTerm = 16,
    /// <summary>
    /// 收到貨品
    /// </summary>
    RecieverGoods = 32,
    /// <summary>
    /// 客戶取消訂單
    /// </summary>
    CustomerCanceled = 64,
    /// <summary>
    /// 供貨商取消訂單
    /// </summary>
    SupplierCancelded = 128
}
但要從UI層看這些狀態怎麼處理呢?
利用switch case

public static string GetOrderStateString(OrderState state)
    {
        switch (state)
        {
            case OrderState.Invalid:
                return "無效值";
            case OrderState.CustomerOrdered:
                return "客戶下單";
            case OrderState.CustomerCanceled:
                return "客戶取消訂單";
            case OrderState.CustomerQuery:
                return "客戶詢價";
            case OrderState.ReceiverCustomerPayment:
                return "客戶已付款";
            case OrderState.RecieverGoods:
                return "訂單到貨";
            case OrderState.SupplierCancelded:
                return "供貨商取消";
            case OrderState.SupplierOrdered:
                return "已向供貨商訂貨";
            case OrderState.SupplierOrderTerm:
                return "供貨商確認貨期";
        }
        return "";
    }


如果以後還有更多的訂單狀態就修改這個枚舉和一個方法就行了,這麼方便的東西為何就不用到我的程式中呢,我們在編碼中,要想盡方法使代碼簡單、易用、易維護。
枚舉中有兩個很實用的方法
1、GetHashCode()   //返回該實例的值的哈希代碼
2、ToString()           //將此實例的值轉換為其等效的字元串表示

這兩個方法在編碼的時候會用到,GetHashCode()這個方法使用機會會更多。

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/gulijiang2008/archive/2009/12/23/5061442.aspx


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • selenium-獲取一組數組進行操作 以 縱橫中文網 中獲取24小時暢銷榜的書單為例 此文僅做 selenium 在自動化測試中怎麼獲取一組數據進行說明,不做網路爬蟲解釋 當然,使用爬蟲得到本文的結果會簡單快捷的多 區別 selenium 中的 elements 與 element 例如:list ...
  • 一、引子 http協議是無狀態的,就是它不會記錄請求和響應的任何信息,比如你訪問一個伺服器的一個網頁時,先要你登錄一下,然後進入網頁,但當你要進入這個伺服器的另一個網頁時,它照常不會知道剛纔你已經登錄過了,又要讓你登錄一下,就是一個bug。但是,你說你每次上網的時候,只需要登錄一下就行了,並沒有我說 ...
  • 這是我的第一篇博客。請多多指教! 首先要下載odoo-12的源代碼 官方下載路徑: https://github.com/odoo/odoo/archive/12.0.zip 隨便新建一個文件夾,我放到D盤裡名為 GZZX(工作中心) 打開pycharm開發工具將odoo-12源代碼導入,然後再Fi ...
  • 例:輸入三個整數,輸出最大值和最小值。 #include<stdio.h>int main(){ int a,b,c,max,min; printf("input three numbers:"); scanf("%d%d%d",&a,&b,&c); if(a>b) {max=a;min=b;} e ...
  • 1.多線程數據安全 線程同步:多個線程需要訪問同一資源時,需要以某種順序來確定該資源某一時刻只能被一個線程使用。 2.同步代碼塊實現同步(部分代碼的訪問,我們希望它同步) package com.test; public class ThreadDemo1 { public static void ...
  • 題意 "題目鏈接" Sol 發現abcdef是互不相關的 那麼meet in the middle一下。先算出abc的,再算def的 註意d = 0的時候不合法(害我wa了兩發。。) cpp include define LL long long using namespace std; const ...
  • 一: BeautifulSoup的安裝: 下載地址:https://www.crummy.com/software/BeautifulSoup/bs4/download/4.6/ 下載後,解壓縮,然後放到Python目錄中。 我是Windows安裝Python3.6,目錄:D:\Python\Pyt ...
  • 題意 "題目鏈接" Sol 把前一半放在左邊,後一半放在右邊 meet in the middle一波 統計答案的時候開始想的是hash,然而MLE了兩個點 實際上只要排序之後雙指針掃一遍就行了 cpp include using namespace std; const int MAXN = 7, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...