C#等同URI

时间:2012-02-17 19:33:38

标签: c# c#-4.0

确定这两个类似的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等,但我想知道是否有更好的方法。

编辑:谢谢大家。我基本上只需让用户强制执行是否相同。

3 个答案:

答案 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>等中使用此方法。