问题标签 [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# - 属性未调用的隐式/显式转换运算符 (System.ComponentModel.DataAnnotation.dll)
我们的域模型中使用了一个自定义的 LocalizedString 类型。我们想用验证属性来装饰属性,比如MaxLength
. 为此,我们添加了隐式运算符以启用此属性所需的强制转换。
奇怪的是,运算符似乎永远不会被调用,并且在属性IsValid
方法中抛出了 InvalidCastException。在我们自己的项目中执行此演员阵容。
在这个系统 clr ngen'ed 属性中是否有一个特殊的强制转换行为编译器 magix?
谢谢你的帮助。
编辑
c++ - C++ 多重运算符=()
我正在写一个字符串类。我希望能够分配我的字符串,例如;
我已经为字符串到整数转换分配了我的 operator=() 方法。如何声明另一个 operator=() 以便我可以执行反向方法?
当我声明另一个时,它似乎覆盖了以前的。
c# - 何时应该在 C# 中定义(显式或隐式)转换运算符?
C# 的一个鲜为人知的特性是创建隐式或显式用户定义类型转换的可能性。我已经编写 C# 代码 6 年了,但我从未使用过它。所以,我担心我可能会错过好机会。
用户定义转换的合法、良好用途是什么?您是否有比仅定义自定义方法更好的示例?
--
事实证明,微软有一些关于转换的设计指南,其中最相关的是:
如果最终用户没有明确期望此类转换,请勿提供转换运算符。
但是什么时候会“预期”转换呢?在玩具编号类之外,我无法弄清楚任何真实世界的用例。
以下是答案中提供的示例的摘要:
- 弧度/度/双
- 极地/Point2D
- 开尔文/华氏度/摄氏度
模式似乎是:隐式转换在定义数值/值类型时主要(仅?)有用,转换由公式定义。回想起来,这是显而易见的。不过,我想知道非数字类是否也可以从隐式转换中受益……?
c++ - isSet() 或 operator void*() 或显式 operator bool() 或其他什么?
检查是否设置了值的函数的最新技术是什么?
例如,下面的迭代器解析单元格。一些单元格包含一个值,其他单元格是空的。
最方便的方法是什么?
思考:
- 我的老板不明白
isset()
=> 改名为isSet()
empty()
更多的是关于容器收集,而不仅仅是一个单元格:(operator void*
似乎是合乎逻辑的方式,但在 C++11 流中已弃用explicit operator
尚不支持(我的代码必须与旧编译器兼容)
我在读:
c++ - 在 3rd 方库中扩展隐式转换
背景
如果第三方库有类似的代码
然后可以像这样调用
问题
是否可以扩展此库(不修改第 3 方代码)以接受以下内容:
我想避免需要写
以上是简化的:在我的真实示例ThirdPartyFunction
中是一个流操作符,并且ThirdPartyClass
是一个允许与流操作符交互的类型包装器。
c# - 从实体框架对象继承
我正在尝试从数据库中设置检索。我有一个 EF(实体框架)对象emUser
和一个User
从 emUser 继承的普通类,但添加了一些额外的功能。
出于某种原因,尽管 User 从 emUser 继承,但我无法显式转换它们。我正在使用的代码:
我可以User
为 emUser 制作一个包装器,但是每次对 emUser 进行更改时,我都必须更改它。我想用来User
区分技术服务层和领域层中使用的类。
我收到这样的错误消息:
为什么我不能将 emUser 转换为 User?
c++ - 隐式转换运算符
我想使用C++11 的可变参数模板功能打印函数的所有参数。我做了以下事情:
然后我尝试测试它:
std::cout << '\'' << concatenate(1, 2, 3, 4, std::string("ololo"), "alala", 'o', 1.2, 1.2L, 1.2f) << '\'' << std::endl;
但随后给出的代码没有编译错误:
error: cannot bind 'std::basic_ostream<char>' lvalue to 'std::basic_ostream<char>&&'
c:\mingw\lib\gcc\mingw32\4.7.0\include\c++\ostream:600: error: initializing argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = concatenate]'
错误的性质是什么?毕竟,编译器别无选择,只能使用转换运算符。不是吗?
c++ - “if (getline(fin, str)) {}”是否符合 C++11 标准?
我检查了 C++11 标准,发现以下事实:
std::getline(fin, str)
返回一个basic_ios
对象,其类有一个成员函数explicit operator bool() const;
该类
basic_ios
没有operator void*() const;
C++11 之前的成员函数。
所以,我认为if (getline(fin, str)) {}
不符合标准。它应该写成
if (bool(getline(fin, str)){}
. (但是,VC++ 2012 对这种用法给出了警告。即强制 void* 为 bool)
我对么?
c# - 用户定义转换如何在 C# 中发生
任何人都可以解释以下程序,即用户定义转换是如何显式和隐式发生的?
另请参阅我对显式转换方法和隐式转换方法的评论。
c# - 为什么当 C# 完全知道它没有结构类型时,它会取笑它?
今天我很惊讶地看到这是可能的,但我担心这必须事先讨论。
编译器会(对吗?)告诉我在上述情况下存在显式转换。我很高兴能感觉到那里的结构打字,但没有运行时间它失败。那么 C# 什么时候在这里有用呢?这种铸造的任何场景都行得通吗?不管是什么,我确信编译器事先知道myAdder
不是ICanAdd
,从技术上讲。