首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Nullable<T>混淆

Nullable<T>混淆
EN

Stack Overflow用户
提问于 2009-03-01 09:07:19
回答 5查看 3.3K关注 0票数 10

为什么以下内容是被禁止的?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Nullable<Nullable<int>>

鉴于

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct MyNullable <T>
{


}

MyNullable<Nullable<int>> 

不是

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-03-01 09:19:06

这是因为结构约束实际上意味着空,因为'not nullable'尽管是一个结构,但也是可以为空的(可以接受值为null)。对于外部可为空的,Nullable<int>不是一个有效的类型参数。

这在the constraints documentation中是显式的

结构,其中T:

类型参数必须是值类型。可以指定除Nullable之外的任何值类型。

有关更多信息,请参见使用可空类型(C#编程指南)。

如果你想知道它的原理,你需要实际的语言设计者对它的评论,但我找不到。然而,我会假设:

  1. 在当前版本中实现Nullable所需的编译器和平台更改相当广泛(并且是2.0版本中相对最新的补充)。

  1. ,他们有几个潜在的令人困惑的边缘情况。

允许int的等价物??这只会混淆这一点,因为该语言没有提供区分可空<Nullable<null>>和可空<null>的方法,也没有任何明显的解决方案来解决以下问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Nullable<Nullable<int>> x = null;
Nullable<int> y = null;
Console.WriteLine(x == null); // true
Console.WriteLine(y == null); // true
Console.WriteLine(x == y); // false or a compile time error!

要使该返回值为真,对于涉及类型的许多操作来说,这将是非常复杂和显著的开销。

CLR中的一些类型是“特殊的”,例如字符串和原语,因为编译器和运行时对彼此使用的实现了解很多。Nullable在这方面也很特别。由于它已经在其他领域有了特殊的用例,所以where T : struct方面并不是什么大问题。这样做的好处是在泛型类中处理结构,因为除了Nullable之外,没有一个可以与null进行比较。这意味着jit可以安全地认为t == null总是为false。

当语言被设计成允许两个非常不同的概念相互作用时,你往往会变得奇怪、困惑或危险的边缘情况。例如,考虑Nullable和相等运算符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int? x = null;
int? y = null;
Console.WriteLine(x == y); // true
Console.WriteLine(x >= y); // false!     

通过在使用struct泛型约束时防止Nullable,可以避免许多令人讨厌的(和不清楚的)边缘情况。

至于规范中要求这个from section 25.7的确切部分(重点是我的):

值类型约束指定用于类型参数的类型参数必须是值类型(§25.7.1)。具有值类型约束的任何不可为空的结构类型、枚举类型或类型参数都满足此约束。具有值类型约束的类型参数不应同时具有构造函数约束。System.Nullable类型为T。指定了不可为空值类型约束。因此,以递归方式构造的T??和Nullable**<**Nullable**<**T**>>** 是禁止的。

票数 19
EN

Stack Overflow用户

发布于 2009-03-01 09:10:53

我相信你只能在Nullable中使用非空值类型。因为Nullable本身是可以为空的,所以这种嵌套方式是被禁止的。

来自http://msdn.microsoft.com/en-us/library/kwxxazwb.aspx

公共可空(T值)

类型:t A值类型。

票数 14
EN

Stack Overflow用户

发布于 2009-03-01 09:45:59

Nullable很特别,因为CLR中内置了对Nullable类型的装箱和拆箱的显式支持:

如果对Nullable<T>使用MSIL box指令,实际上会得到一个null作为结果。没有其他值类型会在装箱时产生null。

对拆箱也有类似和对称的支持。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/600115

复制
相关文章
关于@NotNull 和 @Nullable
在写程序的时候你可以定义是否可为空指针。通过使用像@NotNull和@Nullable之类的annotation来声明一个方法是否是空指针安全的。现代的编译器、IDE或者工具可以读此annotation并帮你添加忘记的空指针检查,或者向你提示出不必要的乱七八糟的空指针检查。IntelliJ和findbugs已经支持了这些annotation。这些annotation同样是JSR 305的一部分,但即便IDE或工具中没有,这个annotation本身可以作为文档。看到@NotNull和@Nullable,程序员自己可以决定是否做空指针检查。顺便说一句,这个技巧对Java程序员来说相对比较新,要采用需要一段时间。
全栈程序员站长
2022/07/01
7470
【译】尝试使用Nullable Reference Types
随着.NET Core 3.0 Preview 7的发布,C#8.0已被认为是“功能完整”的。这意味着它们的最大亮点Nullable Reference Types,在行为方面也被锁定在.NET Core版本中。它将在C#8.0之后继续改进,但现在可以认为它与C#8.0的其余部分一样是稳定的。
AI.NET 极客圈
2019/08/09
3.8K0
【Java】idea @NotNull @Nullable 注解
这两个注解在idea里面可以帮助我们检测方法的返回值,方法参数以及局部变量是否为空,从而帮助我们减少一些NPE的发生。
全栈程序员站长
2022/08/22
2.1K0
【Java】idea @NotNull @Nullable 注解
Android 代码混淆 混淆方案
本篇文章:自己在混淆的时候整理出比较全面的混淆方法,比较实用,自己走过的坑,淌出来的路。请大家不要再走回头路,可能只要我们代码加混淆,一点不对就会导致项目运行崩溃等后果,有许多人发现没有打包运行好好地,打包完成以后而又不不可以了,导致了许多困惑,本片文章来问大家解决困惑,希望对大家有帮助。
全栈程序员站长
2022/09/02
2.7K0
js混淆与反混淆
由于设计原因,前端的js代码是可以在浏览器访问到的,那么因为需要让代码不被分析和复制从而导致更多安全问题,所以我们要对js代码进行混淆。
ek1ng
2023/03/08
11.8K0
js混淆与反混淆
iOS开发+(nullable instancetype)URLWithString:(NSString *)URLString
我们公司做了一个类似于论坛的功能,前几天后台返回的图片不显示,经过一番周折之后发现一个问题,在这里记录一下。
roc
2019/05/15
8650
谈谈Nullable<T>的类型转换问题
本篇文章讨论可空值类型(Nullable<T>)的转换,却确地说是如何将一种类型的值对象转换成相应的可空值。这来源于今天我们的一个成员遇到的一个小问题,我经过一些整理写了这篇文章。虽然没有什么技术含量可言,也希望对某些读者带来帮助。 目录 一、四种典型的值类型转换方式 二、当类型转换遭遇Nullable<T> 三、将基于Nullable<T>的类型转换实现在扩展方法中 四、进一步完善扩展方法ConvertTo 五、谈谈NullableTy
蒋金楠
2018/02/07
9060
iOS代码混淆(Python混淆脚本)
最近一直在看Python,也很喜欢Python的灵活性;今天主要想说的是iOS的代码混淆,为什么想做代码混淆?为了APP的安全,为了防止别人破壳轻易破解我们代码;还有就是做马甲包了,我们知道马甲包的市场需求很大,但是不能花费过多的精力在开发上,毕竟只是个马甲,没必要花费太多的成本!
用户6004386
2019/08/09
3.6K0
iOS代码混淆(Python混淆脚本)
【Android 安全】DEX 加密 ( ProGuard 混淆 | -keepclassmembers 混淆效果 | -keepclasseswithmembernames 混淆效果 )
更多 ProGuard 混淆配置参考 : https://www.guardsquare.com/en/products/proguard/manual/usage
韩曙亮
2023/03/28
4.5K0
【Android 安全】DEX 加密 ( ProGuard 混淆 | -keepclassmembers 混淆效果 | -keepclasseswithmembernames 混淆效果 )
Android代码混淆之混淆规则
因为Android是使用Java开发的,所以开发者可以使用ProGuard对代码进行混淆。SDK已经集成了ProGuard工具,开发者可以从SDK目录下的\tools\proguard目录中进行查看。
全栈程序员站长
2022/09/02
1.5K0
ProGuard混淆
1.压缩(shrinks) :检查并移除代码中无用的类,字段,方法,属性。 2.优化(optimizes):对字节码进行优化,移除无用的指令。 3.混淆(obfuscates):使用a,b,c,d等简短而无意义的名称,对类,字段和方法进行重名,这样即使代码被逆向工程,对方也比较难以读懂。 4.预检测(Preveirfy):在java平台上对处理后的代码进行再次检测。
acc8226
2022/05/17
3.2K1
混淆矩阵
混淆矩阵是一个表,经常用来描述分类模型(或“分类器”)在已知真实值的一组测试数据上的性能。混淆矩阵本身比较容易理解,但是相关术语可能会令人混淆。
用户3577892
2020/06/17
1.4K0
混淆矩阵
android混淆
为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤: 1. 大家也许都注意到新建一个工程会看到项目下边有这样proguard-project.txt一个文件,这个对混淆代码很重要,如果你不小心删掉了,没关系,从其他地方拷贝一个过来 2. 最重要的就是在proguard-project.txt添加混淆的申明了:  a. 把所有你的jar包都申明进来,例如:  -libraryjars libs/apns_1.0.6.jar  -libraryjars li
xiangzhihong
2018/01/30
1.3K0
Nullable Reference Types 可空引用类型
但如果想避免NullReferenceException的发生,确实需要做很多麻烦的工作。
solenovex
2019/10/15
8190
Nullable Reference Types 可空引用类型
【Android 安装包优化】开启 ProGuard 混淆 ( 压缩 Shrink | 优化 Optimize | 混淆 Obfuscate | 预检 | 混淆文件编写 | 混淆前后对比 )
在 build.gradle 中 开启 Proguard , 在编译时 , 会自动进行如下一系列优化 :
韩曙亮
2023/03/29
4K0
【Android 安装包优化】开启 ProGuard 混淆 ( 压缩 Shrink | 优化 Optimize | 混淆 Obfuscate | 预检 | 混淆文件编写 | 混淆前后对比 )
Java 混淆器
在脑海中假想一下,在你苦苦经历 81 难,摸爬滚打研制的技术轮子,终于成型得以问世,遂打个 JAR 包投放于万网之中。可是没过几天,同样功能的轮子出现在你的眼前,关键是核心代码都一样,此时你的内心是否会像一万只草泥马奔腾而过呢?
一猿小讲
2019/10/21
1.6K0
Java 混淆器
public <T> T method(T t)方法详解
相反的,在使用自定义的范型T之前,如果不首先使用来声明范型变量的存在的话,编译器会有错误提示:
JavaEdge
2021/02/22
1.8K0
android 混淆规则作用,Android代码混淆详解
混淆代码并不是让代码无法被反编译,而是将代码中的类、方法、变量等信息进行重命名,把它们改成一些毫无意义的名字,同时也可以移除未被使用的类、方法、变量等。 所以直观的看,通过混淆可以提高程序的安全性,增加逆向工程的难度,同时也有效缩减了apk的体积。总结如下:
全栈程序员站长
2022/09/02
1.8K0
php代码混淆加密算法_java代码混淆加密
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
2K0
点击加载更多

相似问题

Nullable<T>结构

21

Nullable<T>实现

34

Nullable<T>.HasValue和Nullable<T> != null有什么区别?

62

为什么Nullable<T>的零传播返回T而不是Nullable<T>?

15

从Nullable<T>中展开T

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文