【从零开始入门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.mzph.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;但处理不同的数据子集。…