C# 如何比较URI地址

4
什么是确定这两个相似的Uri实际上是相同的标准方法?
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等,但我想知道是否有更好的方法。
编辑:谢谢大家。我基本上只需要让用户强制执行它们是否相同。

8
这两个并不相同。你为什么认为它们是相同的?以这个网站为例,将 http://cdn.sstatic.net/stackoverflow/img/favicon.icohttp://cdn.sstatic.net/stackoverflow/img/favicon.ico/ 进行比较。 - user743382
2
可能是重复问题 - https://dev59.com/eHM_5IYBdhLWcg3wzmgw - alf
你想要实现什么目标?URI 不相同,并且根据一些因素,如果你用这些进行浏览,将会得到非常不同的结果。 - Brian
@Mark:你应该理解URI的概念!如果你看过WordPress,它就有这样的URI:www.addr.com/index.php/2009/2/15/helloworld,它展示了博客中的“Hello World”文章! - ahmadali shafiee
3个回答

8

Uri类重写了Equals方法并实现了==运算符以确定它们之间是否相等。

测试两个Uri实例是否相同的方法是:

if(a == b)

在您的情况下,它们是相等的。在a末尾的目录终止符具有特定含义,而b可能是一个目录或文件。

2

正如大家所评论的那样,这些网址并不相同。

如果您有一些特定的比较网址方法适用于您的情况 - 您需要编写自己的代码进行比较。请尝试使用Uri/ UriBuilder类将Url解析为组件,而不是在比较Url时编写自己的代码。即,您可能希望进行查询字符串的不区分大小写比较。

如果您想说“当它们指向相同内容时,网址相等”,那么您手头上就有一个更有趣的问题。


0

如果您想要实现自己的逻辑,使得上述两个示例被视为相同(我故意避免使用“相等”一词,原因显而易见),一个解决方案是创建一个扩展方法。例如:

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> 等中使用这种方法。


正是 OP 想要的 :) - nawfal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接