1. bool(只可以是)
   1. true
   2. false
2. byte
   1. 无符号的 8 位整数 0 到 255
   2. byte byteValue1 = 201;
   3. byte byteValue2 = 0x00C9;
   4. byte byteValue3 = 0b1100_1001;
3. char(Unicode 16 位字符 ,单引号)
   1. chars[0] = 'X';        // Character literal
   2. chars[1] = '\x0058';   // Hexadecimal
   3. chars[2] = (char)88;   // Cast from integral type
   4. chars[3] = '\u0058';   // Unicode
4. decimal(128 位数据)
   1. 默认值为 0m
   2. ±1.0 x 10-28 至 ±7.9228 x 1028
   3. 28-29 个有效位
   如果没有后缀 m 或 M,则数字将被视为 double 类型并会生成编译器错误。
5. double
   1. ±5.0 × 10−324 到 ±1.7 × 10308
   2. 15-17 位数字
   3. 可使用后缀 d 或 D
6. enum
   1. enum Day {Sat=3, Sun, Mon, Tue, Wed, Thu, Fri}; // 按 3 4 5 6 7 。。 默认指定整数
   2. enum Day : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
   3. 已批准的枚举类型有 byte、sbyte、short、ushort、int、uint, long 或 ulong
7. float
8. int
9.  long
10. sbyte
    1.  -128 到 127
    2.  8 位带符号整数
11. short
    1.  -32,768 到 32,767
    2.  有符号 16 位整数
12. struct
    1. 用来封装小型相关变量组
    2. public struct Book {}
13. uint
    1.  0 到 4,294,967,295
    2.  unsigned int ,不推荐使用,尽可能用int
14. ulong(同上)
15. ushort (同上)

C# 可空类型(Nullable)

空值 : null

C# 提供了一个特殊的数据类型,nullable 类型(可空类型)

可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值。

示例:Nullable< bool > 变量可以被赋值为 true 或 false 或 null。

在处理数据库和其他包含可能未赋值的元素的数据类型时, 将 null 赋值给数值类型或布尔型的功能特别有用。

例: 数据库中的布尔型字段可以存储值 true 或 false,或者,该字段也可以未定义。

单问号 ? 与 双问号 ??

声明一个 nullable 类型(可空类型)的语法如下: < data_type> ? <variable_name> = null;

示例: double? num3 = new double?(); double? num4 = 3.14157;

  1. ? : 单问号用于对 int,double,bool 等无法直接赋值为 null 的数据类型进行 null 的赋值

    意思是这个数据类型是 NullAble 类型的。

int? i = 3 等同于 Nullable<int> i = new Nullable<int>(3);

int i; //默认值0 int? ii; //默认值null

  1. ?? : 双问号 可用于判断一个变量在为 null 时返回一个指定的值。 也称 Null 合并运算符 ?? num3 = num1 ?? 5.34; // num1 如果为空值则返回 5.34

如果第一个操作数的值为 null,则运算符返回第二个操作数的值,否则返回第一个操作数的值。下面的实例演示了这点:


指针类型:参考不安全代码

String

string 类型表示零个或多个 Unicode 字符的序列。

  1. 可用运算符 [] == != += + = \
  2. 整段转义字符(原生字符串) @+字符串
  3. @ 字符串中可以任意换行,换行符及缩进空格都计算在字符串长度之内。

示例

   string str = @"c:\Docs\Source\a.txt"

   string str = @"<script type=""text/javascript"">
       <!--
      -->
   </script>";

   string str = @"""Ahoy!"""
   // 等同于 "Ahoy!"
   //双倍 “ 指代 “

String 方法与属性 参考 杂项记录 -》数据类型-方法属性 -》 String方法属性


表达式 sizeof(type) 产生以字节为单位存储对象或类型的存储尺寸


C# 强类型模仿弱类型(本质是引用)

  1. dynamic 泛型 dynamic 类型的底层(所有类)是 object 类型

  2. 可以存储任何类型的值在动态数据类型变量中。

  3. 这些变量的类型检查是在运行时发生的,非编译时。

但是,如果操作包含 dynamic 类型的表达式,那么不会通过编译器对该操作进行解析或类型检查。 dynamic 类型只在编译时存在,在运行时则不存在。

(dynamic)可用来做强制转换

```c# dynamic d; int i = 20; d = (dynamic)i; Console.WriteLine(d);

string s = "Example string.";
d = (dynamic)s;
Console.WriteLine(d);

DateTime dt = DateTime.Today;
d = (dynamic)dt;
Console.WriteLine(d);

```

  1. var 泛型变量

可以在初始化时被隐式赋值,但被赋值以后,类型就不可发生改变 且(var)不能用作强制转换

Object.GetType().Name 可以查看实际已经变为哪种类型

原理上就是使用 var 来(隐式)自动匹配 变量所对应的类型,运行时仍然是强类型

C# foreach (var item in custQuery) { Console.WriteLine("Name={0}, Phone={1}", item.Name, item.Phone); }


类型对应底层的 .NET 类型

C# 类型 .NET 类型
bool System.Boolean
byte System.Byte
sbyte System.SByte
char System.Char
decimal System.Decimal
double System.Double
float System.Single
int System.Int32
uint System.UInt32
long System.Int64
ulong System.UInt64
short System.Int16
ushort System.UInt16
object System.Object
string System.String