问题标签 [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.

0 投票
2 回答
150 浏览

c# - 允许多个系统显式转换器,但不允许多个用户显式转换器。为什么?

如果我有此代码,它将按应有的方式编译和工作:

也许有些人有点惊讶,因为从 adecimal到没有现成的显式转换MyNumber。但是由于有一个从decimalto的显式转换byte,也有一个从 a 的显式byte转换MyNumber,所以编译器很友好地为我插入了那个额外的显式转换。

简而言之:如果程序员使用显式转换,编译器可以自由搜索其他显式转换以使整个事情顺利进行。

所以......我在自己的课程中尝试了同样的事情。而不是byteand decimal,我使用MyByteand Mydecimal。代码如下所示:

最后一行不会编译。它给出了错误:“无法将类型 'DoubleExplicitCasts.Program.MyDecimal' 转换为 'DoubleExplicitCasts.Program.MyNumber'”。嗯……为什么不???

所以我的问题是:为什么 .NET 系统中的显式运算符得到特殊处理而我的用户显式运算符没有?

编辑
我知道这段代码不起作用,并且值不会从一个实例转移到另一个实例,但这无关紧要。

0 投票
1 回答
2042 浏览

c# - 将 UInt32 转换为 Int32:不同的编译器结果

我在阅读如何从 BinaryReader 简化网络字节顺序转换?问题中的初始代码让我想到了UInt32和之间显式转换的功能Int32。我主要关心的是大于Int32.MaxValue或小于0.

这些强制转换应该是等效的,但是一个有效,另一个导致错误:

为什么一个有效而另一个无效?

这个演员的行为记录在哪里?我能找到的最好的文档是Explicit Numeric Conversions Table (C# Reference),它承认存在显式转换,但警告显式转换“可能导致精度损失或引发异常”。实验表明不会抛出异常,也不会丢失精度。

UInt32 结构表明,由于UInt32不是公共语言规范Int64的一部分,因此当您需要表示高于Int32.MaxValue但低于的值时,您应该只使用 an并浪费一半位UInt32.MaxValue

0 投票
1 回答
2068 浏览

c# - 为什么要使用隐式/显式运算符?

检查下面的代码:

我不明白它在我的代码中会有什么用,我不能做一个像这样的方法:

实施起来不是更容易更清晰吗?

0 投票
2 回答
402 浏览

c# - C# - is operator - 检查所有可用转换的可转换性

进一步阅读后编辑,修改问题更具体。

根据微软文档

如果提供的表达式为非 null,则 is 表达式的计算结果为 true,并且提供的对象可以转换为提供的类型而不会引发异常。否则,表达式的计算结果为 false。

这是下面的问题。

该文档还指出:

请注意,is 运算符仅考虑引用转换、装箱转换和拆箱转换。不考虑其他转换,例如用户定义的转换。

因此,我假设它在上面不起作用,因为它是用户定义的转换。

我将如何检查某些东西是否可以转换为另一种类型,包括非参考/装箱/拆箱转换?

注意:我在为适用于所有类型的 CastToOrDefault 扩展编写单元测试时发现了这个问题,包括非引用类型(与 as 相比


基于 Mike Precup 的链接代码重构的答案

我清理了他的答案,因为我觉得它是用旧风格写的。另外,尽管速度较慢,但​​当每个列表只是另一个列表的子集时,拥有一个包含许多重复值的表感觉有点不稳定。所以,我改为使表递归。注意:如果值为 null,ThrowIfNull 只会抛出 ArgumentNullException。

0 投票
1 回答
271 浏览

c# - 如果隐式已在 C# 中重载,重载显式运算符是否有好处?

我正在使用一个需要对字符串使用隐式运算符的结构,并且遇到了一个我没有考虑过的基本问题。

我可以理解只有显式运算符来强制强制转换,但如果隐式运算符已经重载,我想不出你需要它的情况。有吗?

0 投票
3 回答
1495 浏览

c++ - C++ 中的显式类型转换

我正在尝试将C代码转换为C++. 在我的 .c 文件中,我有这样的定义:

此外,一个线程将像这样初始化上述两个:

当我尝试编译时,我在上面的两个地方都收到了以下错误,如下所示:

我对此感到困惑,希望你们对我说清楚:-)

0 投票
4 回答
646 浏览

c++ - 显式/隐式类型转换 C++

我有一行代码

我的问题是转换顺序和结果是什么?一直在寻找这样的例子,但无济于事。有什么好的指南可以帮助我理解它吗?

0 投票
2 回答
119 浏览

c# - 显式转换会修改对象吗?

显式转换(string)object会修改对象本身吗?当我在 ASP.NET 中使用 Visual C# 进行编码时,我遇到了一件奇怪的事情:

我输入:

结果是

..用户名

这意味着第一个coll.GetValues("REMOTE_USER")[0]在之后没有得到任何东西(string)coll["REMOTE_USER"],第二个coll.GetValues("REMOTE_USER")[0]得到用户名。

那么显式转换会改变对象本身吗?

0 投票
1 回答
342 浏览

f# - LINQ to XML 中的 F# 和显式转换

在 C# 中,我可以这样表达:

这如何在 F# 中表达?

编辑:我确实找到了这个辅助函数

0 投票
2 回答
1593 浏览

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++ 编译代码并且输出是相同的。