很多方法都使用参数中的Uri,但没有带字符串参数的重载。
确实写new Uri("http://smthg")
代替"http://smthg"
非常简单,但我没有看到这样做的重点。 C#为我们提供了一个强大的功能:隐式运算符重载。
在这种情况下,有没有人看到不使用它的充分理由?
答案 0 :(得分:6)
因为并非所有字符串都是URI,并且隐式地转换一个这样的字符串会导致在运行时抛出异常。
精心设计的运算符不会抛出异常。
来自Guidelines for Casting Types:
不要从隐式转换中抛出异常,因为开发人员很难理解正在发生的事情。
答案 1 :(得分:0)
隐式运算符不应抛出异常。有很多字符串无法转换为Uri
,并会导致UriFormatException
被抛出。
而且,你认为合理的分界线在哪里?有很多类型,其中类型有一个参数构造函数接受string
或Parse
方法可用。是否应该用隐式转换替换所有这些?
最后,它是一个好的东西,有时候,迫使人们思考关于数据类型,并且不会一直丢弃所有类型信息而只是工作用字符串。
答案 2 :(得分:0)
同样地,需要数字或日期的函数不会接受字符串,尽管它们都可以表示为字符串。 Uris可以说是一种强大的类型。事实上,按照你的逻辑,我们不需要其他类型的东西,只需要字符串,我们知道这是多么糟糕的举动!