c# 数据类型、类型转换、变量、常量、运算符

 一、数据类型

在 C# 中,变量分为以下几种类型:

  • 值类型(Value types)
  • 引用类型(Reference types)
  • 指针类型(Pointer types)

值类型(Value types)

值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。

值类型直接包含数据。比如 int、char、float,它们分别存储数字、字符、浮点数。当您声明一个 int 类型时,系统分配内存来存储值。

引用类型(Reference types)

引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。

换句话说,它们指的是一个内存位置。使用多个变量时,引用类型可以指向一个内存位置。如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。内置的 引用类型有:objectdynamic 和 string

指针类型(Pointer types)

指针类型变量存储另一种类型的内存地址。C# 中的指针与 C 或 C++ 中的指针有相同的功能。

 

 

知识点

1、decimal,double,float的区别

  • 三者是精度不同的浮点数

精确度简单来说就是保留到小数点后几位

 

 试运行如下所示

 

 

 

 

 

 float 8位

double 16位

decimal 28位

 

二、类型转换

类型转换从根本上说是类型铸造,或者说是把数据从一种类型转换为另一种类型。在 C# 中,类型铸造有两种形式:

  • 隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。
  • 显式类型转换 - 显式类型转换,即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。

1、隐式转换

隐式转换:从类型A到类型B的转换可以在所有情况下进行,执行转换的规则非常简单,可以让编译器执行转换。

隐式转换不需要做任何工作,也不需要另外编写代码。如将int型数据转换成double型数据:

int a = 10;
double b = a;//隐式转换

隐式转换规则是:任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。基于这个转换规则,C#的隐式转换不会导致数据丢失。需要注意的是我们最常用的简单类型bool和string没有隐式转换。

 

2、显式转换

显式转换:从类型A到类型B的转换只能在某些情况下进行,转换规则比较复杂,应进行某种类型的额外处理。显式转换又叫强制类型转换,显式转换需要用户明确的指定转换类型。如将double类型数据转换成int类型数据:

double c = 10.5;
int d = (int)c;//显示转换

提醒:

(1)、显式转换可能会导致错误。进行这种转换时编译器将对转换进行溢出检测。如果有溢出说明转换失败,就表明源类型不是一个合法的目标类型。无法进行类型转换。

(2)、强制类型转换会造成数据丢失,如上面的例子中,最终得到的d值为10。

3、通过方法进行类型转换

(1)、使用ToString()方法。所有类型都继承了Object基类,所以都有ToString()这个方法(转化成字符串的方法)。

(2)、通过int.Parse()方法转换,参数类型只支持string类型。注意:使用该方法转换时string的值不能为为NULL,不然无法通过转换;另外string类型参数也只能是各种整型,不能是浮点型,不然也无法通过转换 (例如int.Parse("2.0")就无法通过转换)。

   int i;
i = int.Parse("100");

(3)、通过int.TryParse()方法转换,该转换方法与int.Parse()转换方法类似,不同点在于int.Parse()方法无法转换成功的情况该方法能正常执行并返回0。也就是说int.TryParse()方法比int.Parse()方法多了一个异常处理,如果出现异常则返回false,并且将输出参数返回0。

 int i;
 string s = null;
 int.TryParse(s,out i);

(4)、通过Convert类进行转换,Convert类中提供了很多转换的方法。使用这些方法的前提是能将需要转换的对象转换成相应的类型,如果不能转换则会报格式不对的错误。注意:使用Convert.ToInt32(double value)时,如果 value 为两个整数中间的数字,则返回二者中的偶数;即 4.5 转换为 4,而 5.5 转换为 6。

(5)、实现自己的转换,通过继承接口IConventible或者TypeConventer类,从而实现自己的转换。

知识点

1、int.TryParse()

public static bool TryParse(string s, out Int32 result);

如果转换成功则返回true。否则返回false

int.TryParse(string s,out int i) 的参数: s是要转换的字符串,i 是转换的结果。

执行成功返回true,输出转换成功的值;执行失败返回0

经过测试发现如下:

int i=0;

1、s 为null

int.TryParse(null,out i) 
false

2、s 为空字符串

int.TryParse(“”,out i) 
false

3、s字符串中带有 空格。

int.TryParse(“1 “,out i) 
true 
int.TryParse(” 1”,out i) 
true 
int.TryParse(” 1 “,out i) 
true 
int.TryParse(“1 2”,out i) 
false

4、非数字型字符串 肯定是 false了。

5、在数据库的操作中,经常会遇到了 DBNull

int.TryParse(System.DBNull,out i) 
“System.DBNull”是一个“类型”,这在给定的上下文中无效

int.TryParse(System.DBNull.Value,out i) 
与“int.TryParse(string, out int)”最匹配的重载方法具有一些无效参数 
int.TryParse(System.DBNull.Value.ToString(),out i) 
false
判断一个输入框是否为整数
int baseNum = default(int);
if (!int.TryParse(txtBaseNum.Text, out baseNum))
{
  MessageBox.Show("请输入一个整数。");
  return;
}

 
//语法:int.TryParse(str, out res)

int res = 1;
int i = 3;
string str = "";
if(int.TryParse(str, out res)){
    //因为str是字符串类型,所以此次转换肯定是失败的,失败返回false
    //所以不会进来循环内部
    //由于执行失败,所以res的值是0
}
if(int.TryParse(i, out res)){
    //因为i是int类型,所以此次转换是成功的,成功返回true
    //所以会进入到循环内部
    //由于执行成功,所以res的值是i,也就是3
}
————————————————
版权声明:本文为CSDN博主「Dear_BigTiger」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Dear_BigTiger/article/details/81033844

总结:TryParse可以为我们的程序减少报错概率,帮助我们准确的完成业务需求,也可以用来判断用户输入的时间、金额、数量等是不是符合规则

 

2、日期转换

1、【c#】将DataTable的时间精确到毫秒

Convert.ToDateTime(dt.Rows[0]["pay_time"]).ToString("yyyy-MM-dd hh:mm:ss.fff");

        先将object类型的dt.Rows[0]["pay_time"]转换成DateTime,转换字符串的时候格式化。

        现在的日期是12小时制的,有时候我们想要的是24小时制,这时候用“HH:mm:ss.fff”就实现了想要的效果。

2、2020-05-13T17:43:22 转化为正常时间 

string sTime1 =‘2020-05-13T17:43:22 ’

string sTime = Convert.ToDateTime(sTime1).ToString();

2、日期型转换成字符型

C#时间格式 tostring、toshortdatestring、toshorttimestring

C#日期格式化

 

三、变量常量

常量

1、常量是使用 const 关键字来定义的 。定义一个常量的语法如下:

const <data_type> <constant_name> = value;
public const int c1 = 5;

 

posted on 2022-04-06 11:52  michellexiaoqi  阅读(194)  评论(0编辑  收藏  举报