问题标签 [implicit]

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 投票
1 回答
518 浏览

c# - 使用 Castle ActiveRecord 属性进行自动类型转换

我有一个带有 DateTime 属性的 Castle ActiveRecord 类。我正在从文本文件中导入数据,并且希望能够执行以下操作:

在最后的分配中,在幕后,理想情况下会检查 的类型date_started,如果是 DateTime,则执行分配,否则执行Convert.ToDateTime(date_started)

我不能覆盖访问器[*],并且隐式运算符仅在转换为包含类或从包含类转换时才起作用。我尝试使用隐式运算符转换扩展 DateTime,但发现它已被密封。现在我是一个非常不开心的动态程序员,卡在一个静态类型的世界里。

我当然可以“手动”进行检查,但我正在实例化许多具有许多属性的不同对象,并且希望能够循环它们(使用反射),而不必对特定属性进行特殊处理。我可以定义自己的自定义访问器,但这同样需要在赋值时进行特殊处理,因为它们需要像方法 ( setX(val)) 而不是属性 ( X = val) 那样使用。

C# (2.0) 或 Castle ActiveRecord 可以为我提供任何干净的方法来在后台获取 String -> DateTime 转换吗?

0 投票
4 回答
1311 浏览

c# - 从隐式转换中抛出异常是否有任何借口?

来自MSDN

通过消除不必要的强制转换,隐式转换可以提高源代码的可读性。然而,因为隐式转换可以在没有程序员指定的情况下发生,所以必须注意防止令人不快的意外。一般来说,隐式转换运算符不应该抛出异常,也不应该丢失信息,以便在程序员不知情的情况下安全地使用它们。如果转换运算符不能满足这些条件,则应将其标记为显式。

虽然我不反对任何特定的观点,并且我同意这一切都非常好,但是否有足够的理由来保证打破关于隐式转换不引发异常的部分?

我面前的特殊情况是:

  1. 我有一个函数,它返回一个自定义集合对象(我们称之为FooCollection)。
  2. 该函数可以返回单个项目的集合,并且可以从源代码中确定是否会发生这种情况。(我的意思是函数调用,而不是函数本身)
  3. 如果确实发生了,那么用户有 99.9% 的可能性想要该单个项目,而不是包含单个项目的集合。

现在,我正在考虑是否包含来自FooCollection=>的隐式转换Foo以隐藏这个小的实现细节,但这种转换只有在集合中有单个项目时才有效。

Exception在这种情况下可以抛出一个吗?或者我应该使用显式强制转换吗?关于如何处理这个问题的任何其他想法(不,由于实现细节我不能只使用两个函数)?

编辑:我觉得值得注意的是FooCollection它没有实现任何接口或实际上扩展Collection名称可能暗示,因此基于 LINQ 的答案是无用的。此外,虽然集合确实实现了数字索引,但它并不是处理集合的最直观方式,因为它主要依赖于命名索引。

0 投票
2 回答
615 浏览

scala - Scala 隐式转换:2 种调用方式

@lucastex发布了关于 Java Elvis 运算符的帖子,我在 Scala 中尝试了一些东西来获得相同的效果。

我刚刚将所有内容都转换为新的结构类型,?:运算符采用与参数相同类型的对象。所以说:

为什么name ?: "Lucas"得到"Lucas"name.?:{"Lucas"}得到Paulo如果新的结构类型不为 null,即"Paulo"在上面的代码中,它应该返回任何东西的初始值。

我有点困惑。有什么解释吗?

0 投票
1 回答
3225 浏览

c++ - C++ 隐式转换为 bool

为了使我的枚举更加类型安全,我一直在使用宏生成的重载运算符来禁止将枚举与除相同类型枚举之外的任何内容进行比较:

这通常具有预期的效果;表单的color_variable == RED比较工作,而表单的比较color_variable == 1由于Boost.StaticAssert而产生编译时错误。(这是一个体面的方法吗?)

但是,我的编译器(CodeGear C++Builder)也在尝试使用这些重载的运算符来实现隐式bool转换。例如,if (color_variable) { ... }正在翻译if (operator!=(color_variable, 0)) { ... }并正在触发BOOST_STATIC_ASSERT和编译失败。

我相当确定这是我的编译器的不正确行为(例如,Comeau 和 GCC 不这样做)但想知道是否有任何语言律师可以确认。我自己尝试在 C++0x 标准草案中查找,但我只能找到第 4.12 节下的以下语句:

将零值、空指针值或空成员指针值转换为 false;任何其他值都将转换为 true。

没有关于如何检查“零值”的详细信息。

0 投票
2 回答
1037 浏览

c# - 隐式运算符 - 什么时候是好/坏主意?

我正在开发一个应用程序,其中方向(向前/向后)的概念非常重要。

问题是在整个代码库中散布着几种不同的约定:在某些地方它是真/假,而在其他地方则是 +1/-1。

为了尝试将其组合在一起,我创建了:

我现在想知道隐式转换是个好主意还是坏主意:

以及是否有我可能会遇到的经典陷阱。

0 投票
5 回答
1581 浏览

c# - 在 c# 3.0 中,是否可以将隐式运算符添加到字符串类?

就像是

所以 :

0 投票
1 回答
4975 浏览

scala - 有没有办法控制默认使用哪个隐式转换?

假设我有这个:

现在如果我添加这个隐式:

我会得到一个编译错误,因为 stringWrapper 也添加了这个隐式。有没有办法对编译器说“忽略其他隐式,使用这个”,这样我就不必实例化一个String2对象并处理它?

我承认示例代码可能不是最合适的(对于这个问题),但我认为它会做。

0 投票
2 回答
438 浏览

vb.net - 隐式 VB 性能问题

有时我必须实现一个接口或继承一个基本方法需要一个对象的虚拟(MustInherit),而我知道我将传递的值将始终是一个整数,例如。

以下示例中的最佳性能应该是什么:

注意事项:

  • 选项 1:不进行强制转换,但可能不太合适,是否会降低性能?
  • 选项 2:在类型已知但感觉更安全的情况下进行投射。

注意:请不要评论“你为什么不想以不同的方式实现它”等等。我的问题不是如何做到这一点,我没有找到如何提问的例子,我的问题只是什么选项应该是正确的,什么会花费更多的性能。

0 投票
2 回答
769 浏览

c# - 在隐式转换中使用字符串常量

考虑以下代码:

但如果可能的话,我希望能够做到以下几点。

我无法使用 TextType 隐式运算符重载扩展 String 类,但是有没有办法将文字字符串分配给另一个类(由方法或其他东西处理)?

String 是一种引用类型,所以当他们开发 C# 时,他们显然必须使用某种方式来获取类的字符串文字。我只是希望它不会被硬编码到语言中。

0 投票
3 回答
1196 浏览

c - 带有没有原型的老式函数的 C 编译器的行为

当我的程序包含两个文件时:

主程序

函数c

编译器不显示任何错误。

当我的程序仅包含一个文件时:

主程序

Visual C++ 2008 编译器显示以下错误:

谁能解释这种奇怪的行为?