C#的数据类型

C#和C,C++的数据类型类似,简单的数据类型比如整型,浮点型,字符型这里就不赘述了,这里主要总结一下C#和C,C++不同或者有差异的数据类型

C#可空类型

C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础 值类型正常范围内的值,再加上一个 null 值。

例如,Nullable< Int32 >,读作"可空的 Int32",可以被赋值为 -2,147,483,648 到 2,147,483,647 之间的任意值,也可以被赋值为 null 值。类似的,Nullable< bool > 变量 可以被赋值为 true 或 false 或 null。

在处理数据库和其他包含可能未赋值的元素的数据类型时,将 null 赋值给数值类型或 布尔型的功能特别有用。例如,数据库中的布尔型字段可以存储值 true 或 false,或 者,该字段也可以未定义。

声明一个 nullable 类型(可空类型)的语法如下:

< data_type> ? <variable_name> = null;

 ? 单问号用于对 int、double、bool 等无法直接赋值为 null 的数据类型进行 null 的赋值, 意思是这个数据类型是 Nullable 类型的。

比如int?num1,就表示在int的基础上添加了null类型的值

??用于判断一个变量在为null的时候返回一个指定的值

double? num1 = null;
double? num2 = 3.14157;
double num3;
num3 = num1 ?? 5.34;

当num1为null返回??右边的值,num1不为null时返回num1的值,上面num3的值 就是5.34

C#数组类型(Array) 

声明数组

datatype[] arrayName;

datatype 用于指定被存储在数组中的元素的类型。

[ ] 指定数组的秩(维度)。秩指定数组的大小。

arrayName 指定数组的名称。

初始化数组

声明一个数组不会在内存中初始化数组。当初始化数组变量时,才可以赋值给数组。

数组是一个引用类型,所以需要使用 new 关键字来创建数组的实例。

double[] balance = new double[10];

数组赋值

数组赋值的方式有很多

索引赋值

double[] balance = new double[10];

balance[0] = 4500.0;

声明时赋值

double[] balance = { 2340.0, 4523.69, 3421.0};

也可以省略数组的大小

int [] marks = new int[] { 99, 98, 92, 97, 95};

赋值一个数组变量到另一个目标数组变量中在这种情况下,目标和源会指向相同的内存位置

int [] marks = new int[]  { 99,  98, 92, 97, 95};

int[] score = marks;

访问数组元素 

通过索引访问

double salary = balance[9];

遍历数组 

foreach遍历数组

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] n = new int[10];//声明一个大小是10的数组
            //初始化数组
            for(int i=0;i<10;i++)
            {
                n[i] = i + 100;
            }
            //遍历数组
            foreach(int j in n)
            {
                int i = j - 100;
                Console.WriteLine("n[{0}]={1}", i, j);
            }
            Console.ReadKey();
        }
    }
}

也可以用for遍历,while遍历等

此外还有二维数组,交错数组,参数数组等等

C#字符串类型

在 C# 中,可以使用字符数组来表示字符串,但是,更常见的做法是使用 string 关键字来声明一个字符串变量。string 关键字是 System.String 类的别名。

创建String对象

  • 通过给 String 变量指定一个字符串
  • 通过使用 String 类构造函数
  • 通过使用字符串串联运算符( + )
  • 通过检索属性或调用一个返回字符串的方法
  • 通过格式化方法来转换一个值或对象为它的字符串表示形式

实例演示

using System;

namespace StringApplication
{
    class Program
    {
        static void Main(string[] args)
        {
           //字符串,字符串连接
            string fname, lname;
            fname = "Rowan";
            lname = "Atkinson";

            string fullname = fname + lname;
            Console.WriteLine("Full Name: {0}", fullname);

            //通过使用 string 构造函数
            char[] letters = { 'H', 'e', 'l', 'l','o' };
            string greetings = new string(letters);
            Console.WriteLine("Greetings: {0}", greetings);

            //方法返回字符串
            string[] sarray = { "Hello", "From", "Tutorials", "Point" };
            string message = String.Join(" ", sarray);
            Console.WriteLine("Message: {0}", message);

            //用于转化值的格式化方法
            DateTime waiting = new DateTime(2012, 10, 10, 17, 58, 1);
            string chat = String.Format("Message sent at {0:t} on {0:D}",
            waiting);
            Console.WriteLine("Message: {0}", chat);
            Console.ReadKey() ;
        }
    }
}

String类的属性

  1. chars:在当前string对象中获取Char对象的指定位置
  2. Length:在当前string对象中获取字符数

string类的方法

String类的方法有很多,这里只列举几个

  1. public bool Equals( string value )
    判断当前的 string 对象是否与指定的 string 对象具有相同的值。
  2. public static string Copy( string str )
    创建一个与指定字符串具有相同值的新的 String 对象。
  3. public int IndexOf( string value )
    返回指定字符串在该实例中第一次出现的索引,索引从 0 开始。
  4. public string Remove( int startIndex )
    移除当前实例中的所有字符,从指定位置开始,一直到最后一个位置为止,并返回 字符串。

C#结构体类型

 在 C# 中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。

定义结构体

使用struct语句定义结构体,struct语句为程序定义了一个带多个成员的新的数据 类型

例如,可以按照如下的方式声明 Book 结构:

Struct Books{

    public string title;

    public string author;

    public string subject;

    public int book_id;

};  

实例

using System;
using System.Text;
     
struct Books
{
   public string title;
   public string author;
   public string subject;
   public int book_id;
};  

public class testStructure
{
   public static void Main(string[] args)
   {

      Books Book1;        /* 声明 Book1,类型为 Books */
      Books Book2;        /* 声明 Book2,类型为 Books */

      /* book 1 详述 */
      Book1.title = "C Programming";
      Book1.author = "Nuha Ali";
      Book1.subject = "C Programming Tutorial";
      Book1.book_id = 6495407;

      /* book 2 详述 */
      Book2.title = "Telecom Billing";
      Book2.author = "Zara Ali";
      Book2.subject =  "Telecom Billing Tutorial";
      Book2.book_id = 6495700;

      /* 打印 Book1 信息 */
      Console.WriteLine( "Book 1 title : {0}", Book1.title);
      Console.WriteLine("Book 1 author : {0}", Book1.author);
      Console.WriteLine("Book 1 subject : {0}", Book1.subject);
      Console.WriteLine("Book 1 book_id :{0}", Book1.book_id);

      /* 打印 Book2 信息 */
      Console.WriteLine("Book 2 title : {0}", Book2.title);
      Console.WriteLine("Book 2 author : {0}", Book2.author);
      Console.WriteLine("Book 2 subject : {0}", Book2.subject);
      Console.WriteLine("Book 2 book_id : {0}", Book2.book_id);      

      Console.ReadKey();

   }
}

结构体的特点

 C# 中的结构与传统的 C 或 C++ 中的结构不同。C# 中的结构有以下特点:

  • 结构可带有方法、字段、索引、属性、运算符方法和事件。
  • 结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义无参构造函 数。无参构造函数(默认)是自动定义的,且不能被改变。
  • 与类不同,结构不能继承其他的结构或类。
  • 结构不能作为其他结构或类的基础结构。
  • 结构可实现一个或多个接口。
  • 结构成员不能指定为 abstract、virtual 或 protected。
  • 当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。 与类不同,结构可以不使用 New 操作符即可被实例化。
  • 如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对 象才被使用。

类和结构的差别

类和结构有以下几个基本的不同点:

  • 类是引用类型,结构是值类型。
  • 结构不支持继承。
  • 结构不能声明默认的构造函数。

C#枚举类型

枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。

C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。

声明enum变量

声明枚举的一般语法:

enum <enum_name>{

     enumeration list

};

num_name 指定枚举的类型名称。

enumeration list 是一个用逗号分隔的标识符列表。

枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下, 第一个枚举符号的值是 0

实例

using System;

public class EnumTest
{
    enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat };

    static void Main()
    {
        int x = (int)Day.Sun;
        int y = (int)Day.Fri;
        Console.WriteLine("Sun = {0}", x);
        Console.WriteLine("Fri = {0}", y);
    }
}

但是也可以自定义每个符号的值

using System;
namespace EnumApplication
{
    class EnumProgram
    {
        enum Days {
            Mon=71, 
            tue=61, 
            Wed=51, 
            thu=41, 
            Fri=51, 
            Sat=61, 
            Sun=71
        };

        static void Main(string[] args)
        {
            int WeekdayStart = (int)Days.Mon;
            int WeekdayEnd = (int)Days.Fri;
            Console.WriteLine("Monday: {0}", WeekdayStart);
            Console.WriteLine("Friday: {0}", WeekdayEnd);
            Console.ReadKey();
        }
    }
}

 如有错漏之处,敬请指正!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真的没事鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值