【從零開始入門unity游戲開發之——C#篇42】C#補充知識——隨機數(Random)、多種方法實現string字符串拼接、語句的簡寫

文章目錄

  • 一、隨機數
    • 1、`Random.Next()`生成隨機整數
      • 示例:生成一個隨機整數
      • 生成指定范圍內的隨機整數
    • 2、`Random.NextSingle`生成隨機浮點數
      • 示例:生成隨機浮點數
    • 3、 生成隨機字母或字符
      • 示例:生成隨機字母
      • 示例:生成隨機小寫字母
  • 二、string字符串拼接
    • 1、通過`+`號來進行字符串拼接
      • 示例:
      • 注意事項:
    • 2、使用復合運算符`+=`進行字符串拼接
      • 示例:
      • 注意事項:
    • 3、`string.Format`進行字符串拼接
      • 示例:
      • 優點:
      • 注意事項:
    • 4、使用 String.Concat 進行字符串拼接
      • 示例:
      • 優點:
    • 5、使用`$`內插字符串
      • 示例:
  • 三、語句的簡寫
    • 1、單行語句的簡寫
    • 2、屬性簡寫
    • 3、方法簡寫
  • 專欄推薦
  • 完結

一、隨機數

在 C# 中,生成隨機數通常使用 Random 類。Random 類提供了一些方法來生成不同類型的隨機數,比如整數、浮點數等。

特點:左包含,右不包含

1、Random.Next()生成隨機整數

要生成隨機整數,可以使用 Random 類的 Next() 方法。

示例:生成一個隨機整數

Random random = new Random();
int randomNumber = random.Next(); // 生成一個非負整數
Console.WriteLine(randomNumber);

生成指定范圍內的隨機整數

可以通過 Next(int minValue, int maxValue) 方法指定生成隨機數的范圍。minValue 是隨機數的最小值(包含),maxValue 是隨機數的最大值(不包含)。

Random random = new Random();
int randomInRange = random.Next(1, 100); // 生成 1 到 99 之間的隨機整數
Console.WriteLine(randomInRange);

2、Random.NextSingle生成隨機浮點數

如果需要生成隨機的浮點數,可以使用 NextSingle() 方法,返回大于或等于0.0且小于1.0的隨機浮點數。

示例:生成隨機浮點數

Random random = new Random();
float randomFloat = random.NextSingle(); // 生成一個 0.0 到 1.0 之間的隨機浮點數
Console.WriteLine(randomFloat);//比如返回0.49565697

3、 生成隨機字母或字符

可以通過隨機生成字符的 ASCII 碼來生成隨機字母。

示例:生成隨機字母

Random random = new Random();
char randomChar = (char)random.Next('A', 'Z' + 1); // 生成大寫字母
Console.WriteLine(randomChar);

示例:生成隨機小寫字母

Random random = new Random();
char randomChar = (char)random.Next('a', 'z' + 1); // 生成小寫字母
Console.WriteLine(randomChar);

二、string字符串拼接

在 C# 中,字符串拼接有多種方式,每種方法都有不同的使用場景和性能表現。

1、通過+號來進行字符串拼接

這是最直接且常見的字符串拼接方式。你可以通過 + 運算符將兩個或多個字符串連接在一起。

示例:

int i = 100;
string str = "你考了" + i + "分";
Console.WriteLine(str);

打印結果
在這里插入圖片描述
注意字符串加數字的區別

string str = "123";
str = str + 1 + 2 + 3;
Console.WriteLine(str);  // 輸出 "123123"
string str = "123";
str = str + (1 + 2 + 3);  // 1 + 2 + 3 = 6,所以 str 變為 "1236"
Console.WriteLine(str);  // 輸出 "1236"

注意事項:

  • + 運算符每次拼接字符串時,都會生成新的字符串對象。這可能會導致性能問題,尤其是在循環中進行多次拼接時。
  • 字符串是不可變的,每次拼接時都會創建一個新的字符串對象,導致內存分配的開銷。

2、使用復合運算符+=進行字符串拼接

+= 是一種復合賦值運算符,類似于 +,但它將拼接的結果賦值回原來的變量。這種方式和 + 運算符類似,但通常用于在已有字符串的基礎上進行累加。

示例:

string str = "123";
str += 1 + 2 + 3 + 4;  // str 進行累加操作,1 + 2 + 3 + 4 = 10,所以 str 變為 "12310"
Console.WriteLine(str);  // 輸出 "12310"
string str = "123";
str += "" + 1 + 2 + 3 + 4;  // 這里會先將 "" 和 1 拼接成 "1",然后 "1" 和 2 拼接成 "12",依此類推,最后 str 變為 "1231234"
Console.WriteLine(str);  // 輸出 "1231234"
string str = "123";
str += "" + 1 + 2 + "" + (3 + 4);//優先計算括號內容
Console.WriteLine(str);  // 輸出 "123127"

注意事項:

  • 與 + 運算符類似,+= 也會在每次拼接時創建新的字符串對象,因此在循環中頻繁使用 += 拼接大量字符串時,也可能會導致性能問題。

3、string.Format進行字符串拼接

string.Format 方法可以將多個變量插入到一個格式化字符串中,是一種更具可讀性和靈活性的拼接方式。你可以使用占位符 {0}, {1}, {2} 等將參數插入到格式化的字符串中。

示例:

string str1 = "Hello";
string str2 = "World";
string result = string.Format("{0} {1}", str1, str2);  // 使用 string.Format 拼接
Console.WriteLine(result);  // 輸出 "Hello World"

優點:

  • string.Format 提供了更強大的格式化功能,比如日期格式化、數字格式化等,適用于更復雜的字符串拼接場景。
  • 它比 + 運算符和 += 更具可讀性,尤其是在需要插入多個變量時。

注意事項:

  • 相對于 ++=string.Format 在性能上略有優勢,尤其是當需要格式化多個變量時。

4、使用 String.Concat 進行字符串拼接

專門用于拼接多個字符串。它的性能比 + 運算符更高,尤其是在大量拼接字符串時。

示例:

string str1 = "Hello";
string str2 = "World";
string result = string.Concat(str1, " ", str2);  // 使用 String.Concat 拼接
Console.WriteLine(result);  // 輸出 "Hello World"

優點:

  • String.Concat 比 + 運算符在性能上更高效,尤其是當需要拼接多個字符串時。
  • 它不會自動插入空格或其他字符,需要手動指定。

5、使用$內插字符串

C# 6.0 引入了字符串插值功能,可以更簡潔地在字符串中嵌入變量。它使用 $"..." 語法,允許直接在字符串中插入變量或表達式。

示例:

string str = "向宇的客棧";
int num = 100;
Console.WriteLine($"來{str}學習C#知識,隨便{num}分");

在這里插入圖片描述


三、語句的簡寫

1、單行語句的簡寫

ifforforeachwhile 等語句中只有單個語句時,C# 允許省略大括號 {},直接寫一行代碼。這在某些情況下可以提高代碼簡潔性,但需要確保不會因為省略大括號導致邏輯混亂。

  • 示例:if 語句簡寫

    if (true) Console.WriteLine("true");if (true) Console.WriteLine("true");
    
  • 示例:for 循環簡寫

    for (int i = 0; i < 10; i++) Console.WriteLine(i);
    
  • 示例:foreach 循環簡寫

    foreach (int i in new int[] { 1, 2, 3 }) Console.WriteLine(i);
    
  • 示例:while 循環簡寫

    while (true) Console.WriteLine("true");
    

2、屬性簡寫

在 C# 中,屬性可以用更加簡潔的語法來表示,特別是當屬性的 get 訪問器只有一行代碼時。通過使用箭頭 => 運算符,可以簡化屬性的書寫。

普通屬性寫法(帶 get 和 set)

public int z {get {return x + y;}
}

簡寫屬性寫法(帶箭頭)

public int z => x + y;

這是一種簡潔的寫法,省去了 get 訪問器的傳統花括號和 return 關鍵字。當屬性的返回值是單個表達式時,可以使用這種簡寫方式。

3、方法簡寫

C# 還支持方法的簡寫。當方法體只有一行代碼時,可以使用箭頭 => 來簡化方法的定義。

  • 不帶參數方法簡寫

    普通方法寫法

    public int TestMethod() {return x + y;
    }
    

    簡寫方法寫法

    public int TestMethod() => x + y;
    
  • 帶參數方法簡寫

    帶參數的方法寫法

    public int TestMethod(int x, int y) {return x + y;
    }
    

    簡寫帶參數的方法

    public int TestMethod(int x, int y) => x + y;
    
  • void 類型無返回值方法簡寫

    普通 void 方法寫法

    public void TestMethod2() {Console.WriteLine("test");
    }
    

    簡寫 void 方法寫法

    public void TestMethod2() => Console.WriteLine("test");
    

專欄推薦

地址
【從零開始入門unity游戲開發之——C#篇】
【從零開始入門unity游戲開發之——unity篇】
【制作100個Unity游戲】
【推薦100個unity插件】
【實現100個unity特效】
【unity框架開發】

完結

贈人玫瑰,手有余香!如果文章內容對你有所幫助,請不要吝嗇你的點贊評論和關注,你的每一次支持都是我不斷創作的最大動力。當然如果你發現了文章中存在錯誤或者有更好的解決方法,也歡迎評論私信告訴我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奮斗的開發者,閑暇之余,邊學習邊記錄分享,站在巨人的肩膀上,通過學習前輩們的經驗總是會給我很多幫助和啟發!如果你遇到任何問題,也歡迎你評論私信或者加群找我, 雖然有些問題我也不一定會,但是我會查閱各方資料,爭取給出最好的建議,希望可以幫助更多想學編程的人,共勉~
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/65008.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65008.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65008.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

吐卡機開發——指令合集—未來之窗行業應用跨平臺架構

序號指令10A 09 02 01 01 0D DE20A 09 02 02 01 FD DE30A 09 02 03 01 6D DF40A 09 02 04 01 5D DD50A 09 02 05 01 CD DC60A 09 02 06 01 3D DC70A 09 02 07 01 AD DD80A 09 02 08 01 5D D890A 09 02 09 01 CD D9100A 09 02 10 01 5D D2110A 09 02 11 01 CD D3120A 09 02 12 0…

fpga系列 HDL:verilog 常見錯誤與注意事項 位寬不匹配+case 語句中沒有覆蓋所有情況

位寬不匹配問題 信號或操作數的位寬不匹配&#xff0c;可能導致仿真或綜合錯誤。 module top (input wire [3:0] a,output wire [7:0] b );assign b a; endmodulecase 語句中沒有覆蓋所有情況 module top (input wire [1:0] sel,input wire [7:0] a,input wire [7:0] b,in…

Linux中操作中的無痕命令history技巧

當我們需要查看Linux下的操作記錄時&#xff0c;就可以用history命令來查看歷史記錄 1、關閉history記錄功能&#xff0c;如果不想讓別人看到自己在Linux上的操作命令&#xff0c;可以用這個命令 set o history 2、打開history記錄功能 set -o history3、清空記錄 histor…

計算機網絡練習題

學習這么多啦&#xff0c;那就簡單寫幾個選擇題鞏固一下吧&#xff01; 1. 在IPv4分組各字段中&#xff0c;以下最適合攜帶隱藏信息的是&#xff08;D&#xff09; A、源IP地址 B、版本 C、TTL D、標識 2. OSI 參考模型中&#xff0c;數據鏈路層的主要功能是&#xff08;…

優化租賃小程序提升服務效率與用戶體驗的策略與實踐

內容概要 在這個快速發展的商業環境中&#xff0c;租賃小程序成為了提升服務效率和用戶體驗的重要工具。通過對用戶需求的深入挖掘&#xff0c;我們發現他們對于功能的便捷性、響應速度和界面的友好性有著極高的期待。因此&#xff0c;針對這些需求&#xff0c;完善租賃小程序…

【數據結構】樹鏈刨分

1 u v k&#xff0c;修改路徑上節點權值&#xff0c;將節點 uu 和節點 vv 之間路徑上的所有節點&#xff08;包括這兩個節點&#xff09;的權值增加 kk。2 u k&#xff0c;修改子樹上節點權值&#xff0c;將以節點 uu 為根的子樹上的所有節點的權值增加 kk。3 u v&#xff0c;詢…

pandas.Grouper() 在實際項目中非常有用,尤其是在處理時間序列數據、財務數據或多級索引數據時

pandas.Grouper() 在實際項目中非常有用&#xff0c;尤其是在處理時間序列數據、財務數據或多級索引數據時。以下是幾個實際場景的例子&#xff0c;展示了如何使用 pandas.Grouper() 進行數據分組&#xff0c;并用數值示例說明。 1. 按月分組進行銷售數據匯總 場景&#xff1…

private static final Logger log = LoggerFactory.getLogger()和@Slf4j的區別

一、代碼方面 - private static final Logger log LoggerFactory.getLogger()方式 詳細解釋 這是一種傳統的獲取日志記錄器&#xff08;Logger&#xff09;的方式。LoggerFactory是日志框架&#xff08;如 Log4j、Logback 等&#xff09;提供的工廠類&#xff0c;用于創建Lo…

醫療數倉Hive安裝部署

Hive安裝部署 Hive安裝部署 1&#xff09;把hive-3.1.3.tar.gz上傳到linux的/opt/software目錄下 2&#xff09;解壓hive-3.1.3.tar.gz到/opt/module/目錄下面 [atguiguhadoop102 software]$ tar -zxvf /opt/software/hive-3.1.3.tar.gz -C /opt/module/3&#xff09;修改hive…

通俗易懂的講一下Vue的雙向綁定和React的單向綁定

1.Vue 的雙向綁定&#xff1a; <template><!-- 輸入框和數據自動綁定&#xff0c;就像連體嬰兒&#xff0c;一個動另一個也動 --><input v-model"message"><p>{{ message }}</p><!-- 完整表單示例 --><form><!-- 所有…

使用setup.py打包 HuggingFace PEFT 項目詳解:pip install peft的幕后流程

使用 setup.py 打包 HuggingFace PEFT 項目詳解 Source: https://github.com/huggingface/peft/blob/main/setup.py 1. 項目簡介 HuggingFace 的 PEFT&#xff08;Parameter-Efficient Fine-Tuning&#xff09;庫是一個用于高效參數微調的 Python 工具包&#xff0c;支持多種…

BP神經網絡的反向傳播算法

BP神經網絡&#xff08;Backpropagation Neural Network&#xff09;是一種常用的多層前饋神經網絡&#xff0c;通過反向傳播算法進行訓練。反向傳播算法的核心思想是通過計算損失函數對每個權重的偏導數&#xff0c;從而調整權重&#xff0c;使得網絡的預測輸出與真實輸出之間…

線程池的創建規范

第1章&#xff1a;引言——為什么使用線程池&#xff1f; 1.1 線程池的概念 線程池是一個容器&#xff0c;用來管理多個工作線程&#xff0c;它通過對線程的管理、復用來提高系統性能。線程池的核心理念是將線程的創建、銷毀、復用等操作交給線程池來管理&#xff0c;避免了頻…

【藍橋杯比賽-C++組-經典題目匯總】

1. 最短路 題目描述&#xff1a; 如下圖所示&#xff0c;G是一個無向圖&#xff0c;其中藍色邊的長度是1、橘色邊的長度是2、綠色邊的長度是3。 則從 A 到 S 的最短距離是多少&#xff1f; #include <iostream> #include <cstring> using namespace std; const i…

活動預告 | Microsoft 安全在線技術公開課:通過擴展檢測和響應抵御威脅

課程介紹 通過 Microsoft Learn 免費參加 Microsoft 安全在線技術公開課&#xff0c;掌握創造新機遇所需的技能&#xff0c;加快對 Microsoft Cloud 技術的了解。參加我們舉辦的“通過擴展檢測和響應抵御威脅”技術公開課活動&#xff0c;了解如何更好地在 Microsoft 365 Defen…

第八節:GLM-4v-9b模型的大語言模型源碼解讀(ChatGLMForConditionalGeneration)

文章目錄 前言一、ChatGLMForConditionalGeneration類源碼解讀1、ChatGLMForConditionalGeneration類源碼2、self.transformer方法源碼3、loss_fct = CrossEntropyLoss(ignore_index=-100)方法Demo二、ChatGLMModel類源碼解讀三、GLMTransformer結構源碼解讀四、GLMBlock結構源…

Windows onnxruntime編譯openvino

理論上來說&#xff0c;可以直接訪問 ONNXRuntime Releases 下載 dll 文件&#xff0c;然后從官方文檔中下載缺少的頭文件以直接調用&#xff0c;但我沒有嘗試過。 1. 下載 OpenVINO 包 從官網下載 OpenVINO 的安裝包并放置在 C:\Program Files (x86) 路徑下&#xff0c;例如…

Vue3 中的插槽

Vue3 中插槽的使用&#xff0c;插槽是 Vue 中的一個特別特性&#xff0c;插槽就是模版內容。例如<h1>標題 1</h1>標題 1 就是插槽&#xff0c;Vue 是無法識別模板內容的&#xff0c;只能通過屬性進行傳遞。Slot 主要包括默認、具名和作用域。Slot開發起來難度不大&…

01.02周四F34-Day43打卡

文章目錄 1. 地是濕的。昨晚估計下雨了。2. 你可能把包丟在餐廳里了吧?3. 她說他可能誤了航班。4. 我本來應該早點來的,但路上特別堵。5. 約翰可能在那次事故中受了重傷。6. 這是一個情景對話7. 我本可以走另一條路的。8. 我準是瘦了不少,你看我這褲子現在多肥。9. 錢沒了!會…

深度學習:基于MindSpore NLP的數據并行訓練

什么是數據并行&#xff1f; 數據并行&#xff08;Data Parallelism, DP&#xff09;的核心思想是將大規模的數據集分割成若干個較小的數據子集&#xff0c;并將這些子集分配到不同的 NPU 計算節點上&#xff0c;每個節點運行相同的模型副本&#xff0c;但處理不同的數據子集。…