C# 基础知识 (五).变量类型和字符串处理

2023-10-31

        这篇文章是阅读《C#入门经典(Beginning C#)》书籍里面的内容,作者Karli Watson.主要包括自己缺乏的一些C#基础知识和在线笔记使用,文章主要包括C#简单变量类型和复杂变量类型、命名规则、隐式转换和显示转换、变量字符串处理等内容,都是非常基础的知识,希望对初学者有所帮助.

一. C#简单变量类型和命名规则

        简单类型组成应用程序中基本构件的类型,其中主要有以下类型:

整数类型
                     

sbyte(-128~127之间整数) byte(0~255之间整数short(-32768~32767之间整数)
ushort(0~65535
之间整数
int(4字节,1Byte=8bit)  uint(0~2^32-1之间整数)
long(
别名System.Int64) 
ulong(别名System.UInt64,uunsigned缩写,非负数)

浮点数类型

float double(+/- m*2^e) decimal(+/- m*10^e)

3种简单类型

char(一个Unicode字符,存储0~65535之间整数)
bool(布尔值true/false)  string(一组字符)

        C#变量命名规则:变量名的第一个字符必须是字母、下划线(_)或@,其后的字符可以是字母、下划线或数字.
        命名约定:以前用Hungarian表示法-在变量名上加上小写形式的前缀,表示其类型,如int型iAge.但由于C# .NET Framework类型复杂,最好根据变量的作用命名它们,目前.NET Framework命名约定PascalCase和camelCase.在名称中使用大小写表示它们的用途,由多个单词组成.
        PascalCase
指定名称中每个单词除第一个字母大写外,其余小写.如Age/LastName/WinterOfDiscontent.
        camelCase第一个单词以小写字母开头,如age、firstName、timeOfDeath.Microsoft建议对于简单变量使用camelCase规则,较高级命名使用PascalCase.建议大家在命名时尽量使用这种方法,方便他人阅读.

        注意:下划线字符分割变量名中单词如month_time已经被淘汰.
        逐字指定字符串:两个双引号之间的所有字符都包含在字符串中,包括行末字符和转义字符.唯一例外是双引号字符的转义必须指定,以免结束字符串,可以在该字符串前加@.
        逐字指定的字符串在文件名中非常有用(反斜杠字符\),前面做过的工程都涉及磁盘目录、图片路径,可见其用途极为广泛.即:@"C:\Temp\MyDir\MyFile.doc"="C:\\Temp\\MyDir\\MyFile.doc".
       
位运算包括&按位与 |按位或 ^按位异或 ~取反 <<左移 >>右移.

二. 隐式转换和显示转换

        隐式转换:从类型A到类型B的转换可以在所有情况下进行,执行转换的规则简单,可以让编译器执行转换.
        显示转换:从类型A到类型B的转换只能在某些情况下进行,转换的规则比较复杂,应进行某种类型的处理.

        其中隐式转换规则是类型A取值范围完全包含在类型B的取值范围内,就可以转换为类型B.其中byte可以转换为short/int或float可以转转为double.short类型变量可以存储0~32767而byte可以存储的最大值255,所以当short转换byte时如果在256~32767就会出错.
        而显示转换即明确要求编译器把数值从一种数据类型转换为另一种数据类型,其中编写代码的格式随着转换方法而异.相当于"我已经知道你对在这么做提出了警告,但我将对其后果负责".如:
        byte n; short m = 7; n = m;
        它将会报错:无法将类型"short"隐式转换为"byte",存在一个显示转换(是否缺少强制转换?)
        此时需要显示转换,最简单的方法是把short变量强制转换为byte,如n=(byte)m;但需要注意m大于255时会产生数据丢失.
        C#提供表达式溢出检查上下文.使用checked和unchecked关键字,如n=checked((byte)m); 当m=281时会报错信息"算术运算导致溢出".
        PS:配置程序表达式都包含checked,右击"解决方案资源管理器"项目->属性->生成->高级(Advanced)->选中"检查运算上溢/下溢",如下图所示:

 


        另一种显示转换方法是使用Convert命令进行显示转换,要转换为int使用Convert.ToInt32(); 转换为字符串使用Convert.ToString(boolVal);结果输出"true/false".这种我在使用字符串和设置编码格式时经常使用.

三. 复杂的变量类型:枚举 结构 数组  

        复杂的变量类型主要包括:
        枚举:变量类型,用户定义一组可能的离散值,这些值用人们理解的方式使用
        结构:合成的变量类型,由用户定义的一组其他变量类型组成
        数组:包含一种类型的多个变量,可以以索引方式访问各个数值 
   
        1.枚举
        有时希望变量提出的是一个固定集合中的值,如week类型存储星期7天,month存储12个月份.枚举允许定义一个类型,其中包含提供的限定值集合中的一个值,如枚举类型orientation可以存储north/south/east/west值.枚举默认类型是int,默认情况每个值都会根据定义的顺序(从0开始),自动赋值给对应的基本类型.没有赋值的任何值都会自动获得一个初始值,该值比上一个明确声明的值大1.举例:

namespace test
{
    //定义枚举类型并指定每个枚举的实际值
    enum orientation : byte
    {
        north = 1,
        south = 2,
        east =3,
        west = 4
    }
    class Program
    {       
        static void Main(string[] args)
        {
            //声明枚举类型变量
            orientation myDirection = orientation.south;       
            Console.WriteLine("myDirection = {0} {1}",myDirection,(int)myDirection);
            Console.ReadKey();            
        }
    }
}

        PS:该程序输出结果为: "myDirection = south 2",实际项目中枚举应用如在制作画图软件时,自定义枚举类型UserSelect变量,然后判断其if (iUserSelect == (int)UserSelect.SELECT)鼠标选择的是线段、矩形、选中状态等.而C语言中经常考察枚举类型的赋值、占用空间地址与结构进行对比等题目.
        2.结构
        struct,structure缩写.结构就是由几个数据组成的数据结构,这些数据可能具有不同的类型.根据这个结构可以定义自己的变量类型.如学生信息(学号+姓名)、存储一段路程(方向+距离),假定东南西北四个方向.通常方法是定义:orientation myDirection; double myDistance;但是如果存储多个路径时定义变量比较麻烦,所以引入结构struct.主要包括结构体数据成员,其格式"<accessibility> <type> <name>;修饰 类型 名称".举例:

namespace test
{
    //定义枚举类型并指定每个枚举的实际值
    enum orientation : byte
    {
        north,
        south,
        east,
        west
    }
    //定义结构类型
    struct route
    {
        public orientation direction;  //方向
        public double distance;        //距离
    }
    class Program
    {       
        static void Main(string[] args)
        {
            //定义结构类型变量及赋值
            route myRoute;
            myRoute.direction = orientation.west;
            myRoute.distance = 3.14;
            Console.WriteLine("direction = {0} distance = {1}", myRoute.direction, myRoute.distance);
            Console.ReadKey();            
        }
    }
}

        运行结果为"direction = west distance = 3.14".
        3.数组
        数组是一个变量的索引列表,存储在数组类型的变量中,存储类型相同的多个值.与C略有不同,C#声明数组的方法是:<baseType>[] <name> 如:int[] myArray;

        初始化的两种方法:
        int[] myArray = {1,2,3,4,5};或者int[] myArray = new int[5];
       
其中new显示初始化数组大小为5,数组元素赋默认值0.如Console.WriteLine("aArray = {0} , bArray = {1}",aArray[3],bArray[2]);输出数字"aArray = 4 , bArray = 0".数组索引从0开始,定义Name[5]即索引为0-4.多维数组的声明如double[,] length = new double[3,4]表示3*4的数组.这些基础知识就不在强调了,应该大家都会.

四. 字符串处理

        <string>.ToCharArray()获取一个可写的char数组,该字符数组中存放当前字符串的所有字符,将字符串复制到指定字符数组中.如:string str = "This is a string"; char[] chs = str.ToCharArray();
        <string>.Length获取元素的个数,给出字符串的字符数.
        <string>.ToLower|<string>.ToUpper()把字符串转换为小写形式和大写形式,在比较或赋值时使用,如:if(useResponse.ToLower() == "yes").
        <string>.Trim()删除输入字符串的空白字符,注意是去掉首尾空格.如:char[] chs = {' ','e','s'}; string str = "    This is a Yeeees  "; str = str.Trim(chs);输出"This is a Y".从字符串的前面或后面删除所有空格、字母e和s 而中间的空格\e\s不变.
        <string>.TrimStart()|<string>.TrimEnd()把字符串前面或后面的空格去掉.

       <string>.PadLeft()|<string>.PadRight()字符串的左边或右边添加空格,使字符串达到指定长度.该方法用于列中对齐字符串,数据库查询显示信息时常用.如: str = "abcdefg"; str = str.PadLeft(10); //输出"   abcdefg" str = str.PadRight(10,'X'); //输出"abcdefgXXX".
        <string>.Split()把string字符串转换为string数组,在指定位置分隔开并删除分隔符,下面是使用空格分隔string str = "This is a string!" char[] chs = {' '}; string[] words; words = str.Split(chs); //输出This is a string!四个单词
        PS:还有很多字符串处理函数作者不在续写,用户可以键入代码第一个字符时,IDE帮助用户提供输入关键字、变量名、类型名等,即IntelliSense功能(智能感应).而且查询用法和关键字时按住Ctrl键可以继续阅读被挡住部分代码(变透明).这个Ctrl我也是丛书中知道.
        总结:
该文章主要是关于C#基础知识的变量类型和字符串处理,其中主要参照书籍《C#入门经典》,推荐大家学习C#的入门书籍.写这种文章感觉有时候自己想得挺多的,可能也有点水,但问心无愧.其实我也更愿意写些实际项目的东西或一些项目经验、项目真正的技术文章,但由于自己的阅历不够、项目能力还一般,还需要继续学习实践,而这种基础文章更多是在线笔记!有时写起来有点淡淡的伤感.希望以后自己能沉下心去真正去学些东西、做些东西,但现在总是有点迷茫,感觉很多东西需要学习又有些乏力,不管如何,先脚踏实地的学些东西,沉浸到代码中去,慢慢寻找自己的人生路吧!自己给自己鼓励,如果有错误或不足之处还请海涵!有建议或教导也可以提出来分享~

 (By:Eastmount 2014-8-23 夜12点 原创CSDN http://blog.csdn.net/eastmount/)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 基础知识 (五).变量类型和字符串处理 的相关文章

  • c++ string函数详细返回值及用法!

    通过在网站上的资料搜集 得到了很多关于string类用法的文档 通过对这些资料的整理和加入一些自己的代码 就得出了一份比较完整的关于string类函数有哪些和怎样用的文档了 下面先罗列出string类的函数有哪一些 然后再罗列出函数的原型
  • c++中string类与字符串数组

    strlen及用 给c 字符串数组赋值 strlen 很笨 它会在遇到 0之前一直找下去 所以在cstr2中没有 0的时候 它会一直找下去 而那些地方还没有被初始化过 所以就是乱的 而且strlen计算出的字符串数组长度是不包含 0的那部分
  • c++11:动态内存与智能指针

    为了更容易 同时也更安全 地使用动态内存 新的标准库提供了两种智能指针 smart pointer 类型来管理动态对象 智能指针的行为类似常规指针 重要的区别是它负责自动释放所指向的对象 新标准库提供的这两种智能指针的区别在于管理底层指针的
  • C++ malloc/free/new/delete详解(内存管理)

    这里写目录标题 malloc free 典型用法 内存分配 实现过程 brk和mmap 申请小于128k的内存 申请大于128k的内存 释放内存 brk和mmap的区别 new delete 典型用法 内存分配 实现过程 new delet
  • Advanced Leve 1005 Spell It Right (20 point(s))

    Theme Given a non negative integer N your task is to compute the sum of all the digits of N and output every digit of th
  • 转载1-Python 字符串操作

    Python 字符串操作 string替换 删除 截取 复制 连接 比较 查找 包含 大小写转换 分割等 1 去空格及特殊符号 s strip s lstrip s rstrip s strip lstrip rstrip 声明 s为字符串
  • [LeetCode] Valid Anagram - 字符串排序比较系列

    题目概述 Given two strings s and t write a function to determine if t is an anagram of s For example s anagram t nagaram ret
  • C++:std::thread

    1 std thread的用法 头文件为 include
  • C++学习笔记-宏(define),类型定义符(typedef),Using,内联函数(inline),指针常量和常量指针的区别与联系

    宏 define 类型定义符 typedef 内联函数 inline 的区别与联系 宏 define define 程序编译的四个阶段 条件编译 tydedef typedef和 define之间的区别 指针常量和常量指针 using 内联
  • 读取文件最后N行

    转自 http www zuidaima com share 1550463669226496 htm 指定行数 可以获取到从这行到文件尾的所有行 分享自大熊 源文件 读取最后10行结果 代码下载地址 http www zuidaima c
  • windows下dll文件的创建详细教程

    1 前言 dll文件是啥 就不作过多赘述了 现在直接教大家如何创建与使用dll文件 本文基于windows系统 使用的编译相关工具为visual studio 2019 2 创建dll 2 1 创建dll工程 首先打开visual stud
  • js 判断变量类型(完整版),包括ES6 新类型Symbol

    欢迎来到Altaba的博客 相信大家在开发中遇到需要判断变量类型的问题 js变量按存储类型可分为值类型和引用类型 值类型包括Undefined String Number Boolean 引用类型包括object Array Functio
  • 【转】C++中的返回值优化

    C 中的返回值优化 在这边文章里用到了以下编译器和操作系统 大家请自行安装 uname ar Linux debian 4 9 0 3 amd64 1 SMP Debian 4 9 30 2 deb9u3 2017 08 06 x86 64
  • C++编译时多态和运行时多态

    编译时多态 运行时多态 两种多态的优缺点 多态就是指一个基类指针根据所指对象的不同而有不同的功能和行为 编译时多态 编译时多态 又叫静态多态 早绑定 编译时多态基于template 模板 的具现化与函数的重载解析 这种多态在编译期进行 因此
  • C# 基础知识 (一).概念与思想篇

    在C 中有一些我自己认为比较独特的知识点 这些知识点是我经常使用的知识 但对它们的了解还是比较少的 所以通过查找资料学习 总结了这些独特的知识点并简单叙述 第一篇主要是一些概念和思想方面的知识 后面还有C 其他篇的文章 一 C 概念 C 语
  • C# 系统应用之无标题窗体移动的两种方法

    在做项目界面设计中 常常为了美观需要设置窗体属性 FormBorderStyle 窗体边框和标题栏外观 为None无标题窗口 此时隐藏标题的窗口怎样实现移动呢 我根据自己的项目从自己完成的两种方法进行讲解 一 MouseDown Mouse
  • C# 基础知识 (四).C#简介及托管代码

    暑假转瞬即逝 从10天的支教生活到1周的江浙沪旅游 在这个漫长的暑假中我经历了很多东西 也学到了很多东西 也认识到了很多不足之处 闲暇之余我准备重新进一步巩固C 相关知识 包括C 入门知识 C 并行开发 ASP网站等 这篇文章我介绍的是书籍
  • C++ qsort 排序函数

    是C中的函数 需要添加 include
  • Basic Level 1014 福尔摩斯的约会 (20分)

    题目 大侦探福尔摩斯接到一张奇怪的字条 我们约会吧 3485djDkxh4hhGE 2984akDfkkkkggEdsb s hgsfdk d Hyscvnm 大侦探很快就明白了 字条上奇怪的乱码实际上就是约会的时间星期四 14 04 因为
  • Basic Level 1024 科学计数法 (20分)

    题目 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法 其满足正则表达式 1 9 0 9 E 0 9 即数字的整数部分只有 1 位 小数部分至少有 1 位 该数字及其指数部分的正负号即使对正数也必定明确给出 现以科学计数法的格式给

随机推荐

  • mysql -n_mysql top n 问题

    日常工作中 经常要查询分组的前几名或查询数据的前几条记录 第5条到第十条 等 TOP N分析法就是通过TOP N算法从研究对象中得到所需的N个数据 并从排序列表中选取最大或最小的N个数据 这就是一个TOP N算法 mysql中用limit
  • (6/300)一阶线性非齐次常微分方程的通解

    一阶线性非齐次常微分方程的通解 首先应该认识方程的形式 dy dx P x y Q x 然后就来思考怎么去解这个方程了 我们最终希望是得到一个y f x 的形式 怎么解呢 先通过线性代数的知识进行引入 求AX b的通解 那么我们先求得A 0
  • MATLAB 信号处理仿真入门实验

    MATLAB 信号处理仿真入门实验 实验目的 熟悉 Matlab 工具的基本用法 掌握 Matlab 代码编写方法 理解序列的离散时间傅里叶变换 理解 DFT 结果的频谱能量泄露 理解 DFT 和 DTFT 的对应关系 理解信号加窗的作用
  • ReactNative入门(一)——环境搭建及第一个RN项目—HelloWorld

    ReactNative入门 本篇以及接下来的几篇有关RN的文章 是默认你对前端相关知识如Node React 以及原生移动端Android可以熟练使用的情况下 最起码达到了解会用的程度 为前提的 不然你就需要先去了学习前端 React为主
  • 图片加载框架-Picasso最详细的使用指南

    写在前面 Android 中有几个比较有名的图片加载框架 Universal ImageLoader Picasso Glide和Fresco 它们各有优点 以前一直用的是ImageLoader 做项目中的图片加载 由于作者宣布ImageL
  • 全国职业技能大赛云计算--高职组赛题卷⑤(容器云)

    全国职业技能大赛云计算 高职组赛题卷 容器云 第二场次题目 容器云平台部署与运维 任务2 基于容器的web应用系统部署任务 15分 任务3 基于容器的持续集成部署任务 15分 任务4 Kubernetes容器云平台部署与运维 15分 本任务
  • 目标检测算法部署网页web端2-点击按钮加载本地图像

    上一篇写了页面的html 目标检测算法部署网页web端1 这篇加个如何点击图像加载按钮 显示在页面上 效果如下 代码如下 b b
  • 【Three.js】第十二章 Materials 材质

    12 Materials 材质 介绍 材质用于为几何体的每个可见像素着色 决定每个像素颜色的算法属于着色器中编写的 编写着色器是 WebGL 和 Three js 最具挑战性的部分之一 但不要担心 Three js 有许多带有预制着色器的内
  • 005 python连接hive

    环境安装 hive hive 安装包配置 python配置hive环境pip install sasl pip install thrift pip install thrift sasl pip install PyHive 注 安装sa
  • CVE-2021-31956提权漏洞分析与利用

    声明 以下内容 来自先知社区的任意门作者原创 由于传播 利用此文所提供的信息而造成的任何直接或间接的后果和损失 均由使用者本人负责 长白山攻防实验室以及文章作者不承担任何责任 漏洞介绍 CVE 2021 31956是发生在NTFS sys中
  • 如何使用Git从网站上拉代码文件

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 Github项目 二 复制文件下载链接 三 将文件下载到我们自己的文件夹中 总结 前言 很多时候我们想从Github网站找到一个想要的项目文件 想要下载下
  • antdv + moment DatePicker日期组件默认显示当天、当周、当月

    一 当天 两种形式 1 非表单
  • 黑马程序员Javaweb学习笔记01

    该博客主要记录在学习黑马程序员Javaweb过程的一些笔记 方便复习以及加强记忆 系列文章 JavaWeb学习笔记01 BS架构 Maven Tomcat Servlet JavaWeb学习笔记02 request和response Jav
  • HY2120的保护板和充电方案整套电路图

    HY2102保护板电路和9V 20V输入的锂电池充电芯片PW4203电路 HY2102保护板电路和5VV输入的锂电池充电芯片PL7501C电路
  • 已解决Win11报错 OSError: [WinError 1455] 页面文件太小,无法完成操作。

    作者主页 爱笑的男孩 的博客 CSDN博客 深度学习 活动 python领域博主爱笑的男孩 擅长深度学习 活动 python 等方面的知识 爱笑的男孩 关注算法 python 计算机视觉 图像处理 深度学习 pytorch 神经网络 ope
  • GD32ADC+DMA定时电压采集(备份)

    初始化了一个串口 初始化了一个adc 一个dma 一个定时器 一个led 这一套搞懂算是基本入门了呀 include gd32f4xx h include systick h include
  • 2)Cadence design entry hdl Tutorial原理图入门

    从最基本的步骤 新建项目开始 1 1项目的组成 参考库是包含原理图符号 sym 的库 显示在原理图上的元件 代表实际的器件 包含封装型号 a Local libraries design libraries 本地库 设计库 项目自动生成的
  • 编程经验分享(寻找map中的max与min)——力扣·百战炼磨(一)

    2021 4 14 力扣第47场双周赛 虚拟竞赛 第三题 所有子字符串美丽值之和 力扣 1781 以下经验来自于对该题目的解决 一个字符串的 美丽值 定义为 出现频率最高字符与出现频率最低字符的出现次数之差 比方说 abaacc 的美丽值为
  • 编辑器mavon-editor离线使用

    cnd部分 可与运维人员商量一起配置 vue2的使用 1 1在public文件夹下面 放入编辑器的全部文件 1 2引入 1 2 1script下面引入 import Vue from vue import mavonEditor from
  • C# 基础知识 (五).变量类型和字符串处理

    这篇文章是阅读 C 入门经典 Beginning C 书籍里面的内容 作者Karli Watson 主要包括自己缺乏的一些C 基础知识和在线笔记使用 文章主要包括C 简单变量类型和复杂变量类型 命名规则 隐式转换和显示转换 变量字符串处理等