我有一个自动化流程,可以生成本地化的Uri,然后将它们与从云中的远程源收集的列表进行比较。如果在路径上使用Uri.Compare
,如果其中一个路径包含不同的面向斜杠(/
与\
),则会报告1
而不是{{1} }。
例如O
与/sites/OmegaSandbox\Shared Documents
的比较。
如何有效地规范化 uri,或调整/sites/OmegaSandbox/Shared Documents
方法以使用Compare
中的现有工具来处理不同的斜杠情况 ?
猜想
.Net
将生成此字符串
/ sites / OmegaSandbox \ Shared Documents
这是问题的开始。
一个辅助问题可能是如何让Path.Combine尊重左手输入斜线方向?
现在,在这一点上,确定可以编写一个正则表达式替换操作,如Path.Combine("/sites/OmegaSandbox", "Shared Documents")
来换掉斜杠,这就是我可能要做的事情。
但StackOverflow野兽必须喂食,这个问题是红肉吧?
示例
Regex.Replace(" ... ", @"(\\)", "/")
无论设置了什么属性,上面的string uri1 = Path.Combine("/sites/OmegaSandbox", "Shared Documents");
string uri2 = @"/sites/OmegaSandbox/Shared Documents";
var u1 = new Uri(uri1, UriKind.Relative);
var u2 = new Uri(uri2, UriKind.Relative);
Uri.Compare(u1, u2, UriComponents.Fragment,
UriFormat.SafeUnescaped,
StringComparison.CurrentCultureIgnoreCase);
都不会返回Uri.Compare
。
是否有任何开箱即用的方式让0
或Compare
使用不同的斜杠?
答案 0 :(得分:1)
您是否尝试使用自定义比较逻辑添加扩展方法,例如
public static class UriExtension
{
public static bool EqualityCheck(this Uri uri, Uri anotherUri)
{
return uri.OriginalString.Replace(@"\", @"/").Equals(anotherUri.OriginalString.Replace(@"\", @"/"));
}
}
并像
一样使用它var u1 = new Uri(uri1, UriKind.Relative);
var u2 = new Uri(uri2, UriKind.Relative);
u1.EqualityCheck(u2);