![]() |
1
4
另一种变体:
|
![]() |
2
6
那怎么办
或者,如果您不需要自己的异常消息,最简单的答案就是:
|
![]() |
3
3
是的,你可以用你的
system.type.isassignablefrom : 根据C规范第7.10.11节:
所以你可以看到他们做了类似的检查。 |
![]() |
4
2
可能是这样(括号越少,可读性越好)
编辑
而不是
所以最终版本可以
或
|
![]() |
5
1
|
![]() |
6
1
或
|
![]() |
7
1
你可能在找
编辑 然而,如果不是在尝试之前就确定是否可以强制转换某些内容,那么as关键字可能是您在帖子中描述的最佳解决方案。 下面的代码将执行相同的功能。。。
|
|
8
1
此场景使用的IsAssignableFrom:
|
![]() |
9
1
只针对那些喜欢玩数字游戏的开发人员(他们不喜欢!)。 IsAssignableFrom公司 与。 作为 测试结果(一百万次尝试): ISassignable来自: 经过7毫秒
|
![]() |
10
-2
它可能是用来处理转换构造函数允许该操作的情况,但显然IsAssignableFrom也不能处理这种情况。没有看到任何 可以
最后,我不明白为什么你不想使用你的代码版本,除非你 希望 当obj为null时引发异常的代码。这是我能看到的唯一区别。当obj为null时,GetType()将引发null引用异常,而不是引发指定的异常。 编辑: 我现在看到,如果T可以是值类型,那么您的代码版本将不会编译,但是建议的另一种解决方案是“if(obj is T)return(T)obj;”将编译。所以我明白为什么你建议的替代方案不起作用,但我不明白为什么你不能使用“是”。 |
![]() |
11
-3
或者更好,因为它更容易阅读真正的条件句。
|
![]() |
Glory Raj · 有什么方法可以使这两个块具有共同的功能吗 2 年前 |
![]() |
milczi · Swift通用无强制展开向下投射 6 年前 |
![]() |
bugs · Typescript-泛型类型扩展自身 6 年前 |
![]() |
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 6 年前 |
![]() |
Blankdud · 具有默认数据的通用对象创建方法 6 年前 |
![]() |
Tim Hutchison · 从泛型对象列表中读取泛型值 6 年前 |