问题标签 [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# - C# 显式运算符和对象
问题
请先看一下代码。
这是我的自定义类:
这是我写的测试代码:
如您所见,当值类型未知时,它无法转换值。我相信这是因为它在 Object 类中搜索不是真实类型的操作数。我怎么解决这个问题?
我有一个代码,其中一切都是对象,它必须处理这些对话。
如果您有任何想法,请告诉我。
避免动态
好的,让我们以您可以看到我到底想要做什么以及我的情况的方式更改示例。
这是我的课程:
这是测试代码:
有没有办法我可以从上面的类中删除动态并保持它的工作?我真的很想避免 .Net4/4.5
c# - C# 5.0 显式数字转换描述是否正确?
从 float 和 double 到 C# 5.0 规范(第 6.2.1 段)中描述的任何整数类型的显式数字转换如下:
• 对于从 float 或 double 到整数类型的转换,处理取决于发生转换的溢出检查上下文(第 7.6.12 节):
同时在MSDN中描述的相同转换规则如下:
当您从 double 或 float 值转换为整数类型时,该值将被截断。如果生成的整数值超出目标值的范围,则结果取决于溢出检查上下文。在已检查的上下文中,会引发 OverflowException,而在未检查的上下文中,结果是目标类型的未指定值。
评估这种转换,例如“(int)123.566”,得到“123”。规范中的描述是否正确?
sql - 从 Access ADODB 执行 SQL Server 存储过程时出现转换错误
以下代码存储在 SQL Server 2008 上的一个过程中,并在 MS Access 中使用 ADODB 执行;尝试在 Access 中执行时收到以下错误...
运行时错误 -2147217913(80040e07)
[Microsoft][ODBC SQL Server Driver][SQL Server]
将 nvarchar 值“fldNumericData”转换为数据类型 int 时转换失败。
fldNumeric
仅包含值 0、1、2、3、4 和 5,但以下语句失败...
c# - 转换为自定义类型,Enumerable.Cast和 as 关键字
这是一个出于好奇而不是必要的问题,并且不得不处理诸如SearchResultCollection
(在System.DirectoryServices
命名空间中)之类的 Active Directory (MS) 类型。
经常在代码中处理 AD 时,我发现我必须检查 null、Count、[0] 的值 .. 并转换我得到的内容 .. 同时希望通过 COM 的底层 AD 对象不会不要去噗等。
在Parallel.ForEach
最近玩了 with 之后 - 并且不得不传入 an IEnumerable<T>
,我想,看看我如何将 aSearchResultCollection
转换IEnumerable
为我自己的自定义类型可能会很有趣。在这种类型中,我会从SearchResult
对象中提取所有值并将它们粘贴到我自己的 .NET 托管代码中。然后我会取消DirectoryEntry
,DirectorySearcher
等等等等。
因此,已经确定执行 searchResultCollection.Cast() 以便为 Parallel.ForEach 提供其源代码是一个好主意,我添加了一个显式运算符用于转换为我自己的类型(我们就称之为' Item
')。
ParallelForEach
我在,中对此进行了测试var myItem = (Item)currentSearchResult
。
好时光,我的演员操作员被调用,一切正常。然后我想,做类似的事情会很好searchResultCollection.Cast<Item>()
。可悲的是,这不起作用,没有在演员阵容中遇到任何断点。
我做了一些谷歌搜索,发现了 Jon Skeet 回答的一个有用的帖子:
关键在于,使用 .Select(...) 强制显式强制转换操作。好的,但是,嗯。
我走了,也许是反汇编System.Core
-> System.Linq.Enumerable.Cast<TResult>
,我注意到这个“演员”实际上是在做一个“as”关键字转换:
我阅读了更多内容并发现了这一点:
这里的最佳答案指出' as
'不调用任何转换运算符..使用(强制转换)。语义上我觉得这有点奇怪,因为扩展方法被称为 cast.. 它不应该是强制转换吗?毫无疑问,这不会发生的一个很好的理由,有人知道它是什么吗?
c++ - C++ 显式类型转换给出了错误的答案
为什么我会在 c++ 中将 int 转换为浮动错误?在程序中的某个时刻,我将一个值为 10 或 14 的整数显式转换为浮点数,我得到 0。为什么会这样?我尝试了 static_cast,给了我同样的结果。由于 int 和 float 都是 4 个字节,我认为 int 到 float 的转换不是按大小降级或提升吗?它与舍入误差等有关吗?有人可以解释一下。
这是代码(这里有一个改动很好,但我仍然不知道为什么)---
编译命令-> g++ 3.2.cpp -o 3.2
输入:n = 4;元素 = 1 2 3 4
感觉像是我忽略的一些小事。
谢谢您的帮助。
c++ - 为什么这个显式转换运算符适用于 g++ 而不是 Visual Studio 2013?
以下示例包含两个模板类来表示度数和弧度,并使用显式转换运算符在它们之间进行转换。它使用 g++ ( ideone link )编译和运行,但不能使用 Visual Studio 2013Visual C++ Compiler Nov 2013 CTP (CTP_Nov2013)
作为平台工具集。
Visual Studio 错误输出:
怎么了?为什么它适用于 g++ 而不是 Visual Studio 2013?哪个编译器在做正确的事情?
c# - 狗到人类年,反之亦然
我正在尝试这个示例问题,我必须创建两个隐式转换运算符才能从 Human 创建一个 Doggy 类,反之亦然。课程需要考虑到人类的一年是狗的七年。有人告诉我,如果从 Dog 年变为人类年以确保年龄的类型仍然是 int (当然),并且可能需要一些明确的转换。我不知道如何定义 DogToHuman.Name、DogToHuman.Age、HumanToDog.Name 和 HumanToDog.Age。我对编程有点陌生,所以我不习惯这种格式。任何数字开头都可以,就像人类 25 岁一样。
抱歉有任何困惑,我不仅仅是在寻找答案,而是在寻找如何去做。
c++ - 通用转换运算符模板和移动语义:任何通用解决方案?
这是Explicit ref-qualified conversion operator templates in action的后续。我已经尝试了许多不同的选项,我在这里给出了一些结果,试图看看最终是否有任何解决方案。
假设一个类(例如any)需要以一种方便、安全(毫无意外)的方式提供对任何可能类型的转换,同时保留移动语义。我能想到四种不同的方法。
最有问题的情况是在给定临时或右值引用的情况下初始化对象或对对象的右值引用。函数调用在所有情况下都有效(我认为),但我发现它们太冗长了:
因此,我接下来尝试使用转换运算符:
似乎const&
重载可以在右值上调用,这会产生歧义,从而使复制初始化和隐式转换成为唯一的选择。
但是,请考虑以下不太重要的类:
它提供通用的隐式或显式构造函数,具体取决于输入参数是否可以隐式或显式转换为某种类型。这样的逻辑并不是那么奇特,例如,某些实现std::tuple
可以是这样的。现在,初始化一个D
给
由于不同的原因,唯一可用的选项直接初始化带有隐式转换。然而,这正是隐式转换危险的地方。b
可能实际上包含 a D
,它可能是一种容器,但工作组合正在调用D
的构造函数作为精确匹配,其中b
的行为就像容器的假元素,导致运行时错误或灾难。
最后,让我们尝试初始化一个右值引用:
似乎每个用例都有自己的要求,并且没有可能适用于所有情况的组合。
更糟糕的是,以上所有结果都是clang 3.3;其他编译器和版本给出的结果略有不同,同样没有通用解决方案。例如:活的例子。
那么:是否有任何机会可以按预期工作,或者我应该放弃转换运算符并坚持使用显式函数调用?
c# - C# 中继承的奇怪行为
我对 C# 很陌生,所以我希望如果我的问题听起来很愚蠢,请原谅我的无知。
-我正在尝试Inheritance
使用 FundaC#
并发现它的行为方式有些奇怪,所以我想用 来检查它Java
,我得到了预期的结果。
-我只想知道这里有什么我想念的......
C#代码:
输出 :
JAVA代码:
输出 :
-现在我对这一整集的怀疑是..在C#
我分配给类型Dog object
的对象引用变量时,然后当我调用方法时,我应该得到输出(这是 Dog 类中的重写方法),而是方法称为将输出作为。a
Animal
Sound()
a
barking
Animal's Sound()
I don't make any sound
-但是Java
事情按预期工作..继承在任何地方都以相同的方式工作,所以我哪里出错了。
如果有人可以帮助我,我将不胜感激......在此先感谢。
c++ - XmlRpcValue 的显式转换为加倍
我正在尝试将 XmlRpc::XmlRpcValue 转换为双精度值。隐式转换方法不起作用,所以我必须显式转换它。但是,我无法让 3 种显式转换类型中的任何一种工作。
XmlRpcValue 是双精度向量的向量。在 .yaml 文件中,该字段如下所示:
现在我想将每个值读入一个双精度值。我尝试了以下方法:
使用 static_cast、reinterpret_cast 和 dynamic_cast。我不觉得我完全理解显式种姓的一切,但我认为 static_cast 是我需要的。我尝试动态并重新解释只是为了看看会发生什么。他们都失败了,并显示以下消息:
static - 从“const XmlRpc::XmlRpcValue”类型到“double”类型的无效静态转换</p>
重新解释 - 错误:从类型“const XmlRpc::XmlRpcValue”到类型“double”的无效转换</p>
动态 - 不能 dynamic_cast '(& dof.XmlRpc::XmlRpcValue::operator)->XmlRpc::XmlRpcValue::operator'(类型为 'const class XmlRpc::XmlRpcValue')类型为 'double'(目标不是指针或参考)
如果有人可以帮助我,我将不胜感激。
编辑:
我尝试将 static_cast 转换为 std::vector< std::vector >。它无法编译: