问题标签 [explicit-conversion]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 允许多个系统显式转换器,但不允许多个用户显式转换器。为什么?
如果我有此代码,它将按应有的方式编译和工作:
也许有些人有点惊讶,因为从 adecimal
到没有现成的显式转换MyNumber
。但是由于有一个从decimal
to的显式转换byte
,也有一个从 a 的显式byte
转换MyNumber
,所以编译器很友好地为我插入了那个额外的显式转换。
简而言之:如果程序员使用显式转换,编译器可以自由搜索其他显式转换以使整个事情顺利进行。
所以......我在自己的课程中尝试了同样的事情。而不是byte
and decimal
,我使用MyByte
and Mydecimal
。代码如下所示:
最后一行不会编译。它给出了错误:“无法将类型 'DoubleExplicitCasts.Program.MyDecimal' 转换为 'DoubleExplicitCasts.Program.MyNumber'”。嗯……为什么不???
所以我的问题是:为什么 .NET 系统中的显式运算符得到特殊处理而我的用户显式运算符没有?
编辑
我知道这段代码不起作用,并且值不会从一个实例转移到另一个实例,但这无关紧要。
c# - 将 UInt32 转换为 Int32:不同的编译器结果
我在阅读如何从 BinaryReader 简化网络字节顺序转换?问题中的初始代码让我想到了UInt32
和之间显式转换的功能Int32
。我主要关心的是大于Int32.MaxValue
或小于0
.
这些强制转换应该是等效的,但是一个有效,另一个导致错误:
为什么一个有效而另一个无效?
这个演员的行为记录在哪里?我能找到的最好的文档是Explicit Numeric Conversions Table (C# Reference),它承认存在显式转换,但警告显式转换“可能导致精度损失或引发异常”。实验表明不会抛出异常,也不会丢失精度。
UInt32 结构表明,由于UInt32
不是公共语言规范Int64
的一部分,因此当您需要表示高于Int32.MaxValue
但低于的值时,您应该只使用 an并浪费一半位UInt32.MaxValue
。
c# - 为什么要使用隐式/显式运算符?
检查下面的代码:
我不明白它在我的代码中会有什么用,我不能做一个像这样的方法:
实施起来不是更容易更清晰吗?
c# - C# - is operator - 检查所有可用转换的可转换性
进一步阅读后编辑,修改问题更具体。
根据微软文档:
如果提供的表达式为非 null,则 is 表达式的计算结果为 true,并且提供的对象可以转换为提供的类型而不会引发异常。否则,表达式的计算结果为 false。
这是下面的问题。
该文档还指出:
请注意,is 运算符仅考虑引用转换、装箱转换和拆箱转换。不考虑其他转换,例如用户定义的转换。
因此,我假设它在上面不起作用,因为它是用户定义的转换。
我将如何检查某些东西是否可以转换为另一种类型,包括非参考/装箱/拆箱转换?
注意:我在为适用于所有类型的 CastToOrDefault 扩展编写单元测试时发现了这个问题,包括非引用类型(与 as 相比)。
基于 Mike Precup 的链接代码重构的答案
我清理了他的答案,因为我觉得它是用旧风格写的。另外,尽管速度较慢,但当每个列表只是另一个列表的子集时,拥有一个包含许多重复值的表感觉有点不稳定。所以,我改为使表递归。注意:如果值为 null,ThrowIfNull 只会抛出 ArgumentNullException。
c# - 如果隐式已在 C# 中重载,重载显式运算符是否有好处?
我正在使用一个需要对字符串使用隐式运算符的结构,并且遇到了一个我没有考虑过的基本问题。
我可以理解只有显式运算符来强制强制转换,但如果隐式运算符已经重载,我想不出你需要它的情况。有吗?
c++ - C++ 中的显式类型转换
我正在尝试将C
代码转换为C++
. 在我的 .c 文件中,我有这样的定义:
此外,一个线程将像这样初始化上述两个:
当我尝试编译时,我在上面的两个地方都收到了以下错误,如下所示:
我对此感到困惑,希望你们对我说清楚:-)
c++ - 显式/隐式类型转换 C++
我有一行代码
我的问题是转换顺序和结果是什么?一直在寻找这样的例子,但无济于事。有什么好的指南可以帮助我理解它吗?
c# - 显式转换会修改对象吗?
显式转换(string)object
会修改对象本身吗?当我在 ASP.NET 中使用 Visual C# 进行编码时,我遇到了一件奇怪的事情:
我输入:
结果是
..用户名
这意味着第一个coll.GetValues("REMOTE_USER")[0]
在之后没有得到任何东西(string)coll["REMOTE_USER"]
,第二个coll.GetValues("REMOTE_USER")[0]
得到用户名。
那么显式转换会改变对象本身吗?
f# - LINQ to XML 中的 F# 和显式转换
在 C# 中,我可以这样表达:
这如何在 F# 中表达?
编辑:我确实找到了这个辅助函数
c++ - Visual Studio 2013“显式”关键字错误?
考虑以下程序:
Visual Studio 2013 编译此代码并运行,输出
这是编译器错误吗?看起来 VS 编译器在这种情况下没有注意“显式”关键字。据我了解,VS 2013 错误地将运算符 int() 与 A(int) 结合使用来排序“复制构造”A 作为 f 的默认参数。
两者都添加
主要并将 f 声明为
不编译,VS 抱怨 A(A&) 被删除,这似乎是正确的行为。只有在函数模板默认参数的上下文中,运算符 int() 和 A(int) 的组合似乎可以替代 A( A& )。
g++ 4.7.3 不编译代码并抱怨:
删除 'explicit' 使 g++ 编译代码并且输出是相同的。