为什么没有从字符串到Uri的隐式运算符?

时间:2015-08-17 12:21:34

标签: c#

很多方法都使用参数中的Uri,但没有带字符串参数的重载。

确实写new Uri("http://smthg")代替"http://smthg"非常简单,但我没有看到这样做的重点。 C#为我们提供了一个强大的功能:隐式运算符重载。

在这种情况下,有没有人看到不使用它的充分理由?

3 个答案:

答案 0 :(得分:6)

因为并非所有字符串都是URI,并且隐式地转换一个这样的字符串会导致在运行时抛出异常。

精心设计的运算符不会抛出异常。

来自Guidelines for Casting Types

  

不要从隐式转换中抛出异常,因为开发人员很难理解正在发生的事情。

答案 1 :(得分:0)

隐式运算符不应抛出异常。有很多字符串无法转换为Uri,并会导致UriFormatException被抛出。

而且,你认为合理的分界线在哪里?有很多类型,其中类型有一个参数构造函数接受stringParse方法可用。是否应该用隐式转换替换所有这些?

最后,它是一个的东西,有时候,迫使人们思考关于数据类型,并且不会一直丢弃所有类型信息而只是工作用字符串。

答案 2 :(得分:0)

同样地,需要数字或日期的函数不会接受字符串,尽管它们都可以表示为字符串。 Uris可以说是一种强大的类型。事实上,按照你的逻辑,我们不需要其他类型的东西,只需要字符串,我们知道这是多么糟糕的举动!