确定这两个类似的Uris实际上是一样的标准方法是什么?
var a = new Uri("http://sample.com/sample/");
var b = new Uri("http://sample.com/sample");
Console.WriteLine(a.Equals(b));
// False
确定a == b的最佳方法是什么?我可以比较Uri对象的子属性,如Host,LocalPath等,但我想知道是否有更好的方法。
编辑:谢谢大家。我基本上只需让用户强制执行是否相同。
答案 0 :(得分:7)
Uri类会覆盖Equals
并实现==
运算符以确定相等。
测试两个Uri实例是否相同的方法是:
if(a == b)
在您的情况下,它们不等效。 a
末尾的目录终止符具有特定含义,而b
可能是目录或文件。
答案 1 :(得分:1)
众所周知 - 这些网址不一样。
如果你有一些特殊的方法来比较网址你的的情况 - 你需要编写自己的代码进行比较。请尝试使用Uri / UriBuilder类将Url解析为组件,而不是在比较Urls时编写自己的组件。即您可能希望进行比较以对查询字符串进行不区分大小写的比较。
如果你想说“当他们指向同一内容时网址相同”,那么你手头上就会遇到更多有趣的问题。
答案 2 :(得分:0)
如果你想实现你自己的逻辑,其中上面的两个例子被认为是相同的(我故意避免使用相同的术语,显而易见的原因)一个解决方案是创建一个extension method。 E.G。
public static class ExtensionMethods
{
public static bool AreTheSame(this Uri left, Uri uri)
{
//your implemention here
}
}
然后你可以:
var a = new Uri("http://sample.com/sample/");
var b = new Uri("http://sample.com/sample");
Console.WriteLine(a.AreTheSame(b));
您可以在自己的IComparer<in T>
等中使用此方法。