typeof,as,is的用法

C#类型操作
本文介绍了C#中的类型操作,包括typeof、as和is的使用方法。typeof用于获取类型的System.Type对象,as和is则用于类型转换及兼容性检查。

typeof用法
用于获取类型的 System.Type 对象
typeof的表达有一下形式

System.Type type = typeof(int);

若要获取表达式的运行时类型,可以使用 .NET Framework 方法 GetType,如下所示:

int i = 0;
System.Type type = i.GetType();

typeof 运算符也能用于公开的泛型类型。具有不止一个类型参数的类型的规范中必须有适当数量的逗号。不能重载 typeof 运算符。

as和is
在C#语言中进行类型转换的操作符is和as。is和as都是强制类型转换。
is检查一个对象是否兼容于指定的类型,并返回一个Boolean值:true或者fasle。注意,is操作符永远不会抛出异常。

Object o=new Object();
Boolean b1=(o is Object); //b1为true. 
Boolean b2=(o is ClassA) ; b2为false.
如果对象引用是null,is操作符总是返回false,因为没有可检查的其类型的对象。
 is 操作符通常像下面这样使用:
if(obj is ClassA)
{
    ClassA a=(ClassA) obj;
   ... 
 }

as与is做差不多的事情,类型显式强制转换。
as操作符的工作方式与强制类型转换一样,只是它永远不会抛出一个异常——相反,如果对象不能转换,结果就是null。

### 解释 `as keyof typeof` 的用法TypeScript 中,`as keyof typeof` 是一种常见的模式,用于确保变量或函数参数的类型安全。这种组合通常用来处理对象字面量中的键名,从而实现更严格的类型检查。 当使用 `typeof` 操作符时,可以获取某个值的具体类型。而 `keyof` 则允许访问该类型的属性名称集合。通过将两者结合起来并配合断言 (`as`) 使用,能够精确控制哪些字符串文字类型是可以接受的作为键名传递给函数或其他结构体。 具体来说,在定义像 `prop` 这样的辅助工具函数时,可以通过这种方式增强其健壮性和灵活性: ```typescript // 定义一个接口表示可能的对象形状 interface Person { name: string; age: number; } const person: Person = { name: "Alice", age: 30, }; function getProp<T extends object, K extends keyof T>(obj: T, key: K): T[K] { return obj[key]; } // 正确调用 console.log(getProp(person, 'name')); // 输出 Alice console.log(getProp(person, 'age')); // 输出 30 // 错误调用会报错:Argument of type '"address"' is not assignable to parameter of type '"name" | "age"' // console.log(getProp(person, 'address')); ``` 上述例子展示了如何利用 `getProp` 函数结合 `T extends object` 和 `K extends keyof T` 来限定传入的对象及其对应的键名范围,确保编译期就能捕捉到非法输入[^1][^2]. 对于更加复杂的场景下,比如当你有一个枚举或者常量数组,并希望从中提取合法的键名列表,则可以采用如下方式: ```typescript const COLORS = ['red', 'green', 'blue'] as const; type Color = typeof COLORS[number]; function getColorValue(colorName: Color) { switch (colorName) { case 'red': return '#FF0000'; case 'green': return '#00FF00'; case 'blue': return '#0000FF'; default: throw new Error('Unknown color'); } } ``` 这里的关键在于声明了一个只读元组(`as const`)以及后续基于此构建的颜色类型别名(Color),这使得我们可以安全地操作这些预定义好的颜色名字而不必担心拼写错误等问题的发生[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值