C#里的类型转换
参考 https://zhidao.baidu.com/question/588682617.html
从下到上,可以直接转换。
从上到下,必须显式转换(强转)。而且“上”和“下”必须同时继承 或实现了同一个类型 或 接口 才可以用 as。
as概念
as:非强转类型。
强转类型:一般在变量前面加:(所需类型)。如果转换失败,系统就会报错。
如果用as,就不会报错,转换失败的话,就会返回null。as后面的类型必须可以为null 。
as示例
参见上面链接。
下面是我自己的示例:
运行后报错:
System.NullReferenceException:“Object reference not set to an instance of an object.”
tempIntMes 是 null。
原因是转换失败导致tempIntMes为null,就不存在tempIntMes.message了。
using System;
namespace ConsoleApp3
{
public class Program
{
public class IntMes
{
public int message { get; set; }
}
public static void Main(string[] args)
{
object message = 111111111;
var tempIntMes = message as IntMes;
//as后面的类型必须可以为null
//as前面除了object类型以外还可以是什么类型?
//var tempInt = message as int;
Console.WriteLine("message="+message);
Console.WriteLine("tempIntMes=" + tempIntMes.message); //编译成功但运行时报错null,说明转换失败。转换失败的原因是message和IntMes的类型并没有同时继承(或者实现)同一个类(或者接口)。
Console.ReadKey();
}
}
}