繁体   English   中英

C#等同URI

[英]C# Equating URIs

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

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

Uri类重写Equals并实现==运算符以确定相等性。

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

if(a == b)

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

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

如果你对你的情况比较网址有某些特殊的方式-你需要编写自己的代码进行比较。 请尝试使用Uri / UriBuilder类将Url解析为组件,而不是在比较Urls时编写自己的组件。 也就是说,您可能希望进行比较以对查询字符串进行不区分大小写的比较。

如果你想说“当他们指向相同的内容时网址是平等的”,那么你手头有更多有趣的问题。

如果你想实现你自己的逻辑,其中上面的两个例子将被认为是相同的(我故意避免术语相等,显而易见的原因)一个解决方案是创建一个扩展方法 例如

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM