4

Silverlight 对查询字符串参数区分大小写,因此以下代码将使用“callid=5”返回 false

string callId;
if (System.Windows.Browser.HtmlPage.Document.QueryString.TryGetValue("callId", out callId))
{
....
}

微软通过引用 www.w3.org 规范为该决定辩护,但我认为这会导致人们试图链接到您或通过电话提供 URL 的体验不太友好。

看起来 Stackoverflow 不区分大小写: https://stackoverflow.com/search?q=silverlight+bug https://stackoverflow.com/search?Q=silverlight+bug

4

4 回答 4

5

我认为你应该关注你的命名约定而不是标准的实现,确保避免类似的字段名称和混合大小写。例如,您可以使用可以通过电话读出的单词约定,说明“全部小写”或“全部大写”。

于 2009-04-30T18:18:26.907 回答
1

我这样做了。不知道有没有帮助。

var keyName = "";
if (!string.IsNullOrEmpty(keyName = someDictionary.SomeKeys.FirstOrDefault(k => k.ToLowerInvariant() == "size")))
{
    var someValue = someDictionary[keyName];
}
于 2014-05-26T17:08:43.860 回答
0

是的,我习惯了它区分大小写,因此已经为它编程了很长时间。我知道有些人已经实现了一些方法来进行中间解析以将它们全部转换为小写,或者服务器端的其他东西,这实际上取决于你具体使用的是什么。

至于可用性,是的,它更难阅读。但是,与此同时,电话上具有查询字符串的 URL 无论如何都不容易提供。

于 2009-04-30T18:16:01.517 回答
0

此解决方法不会使用字典的强大功能,因为它将遍历所有键,但对于大多数情况来说,它可能是一个足够的解决方法。

var keyName = HtmlPage.Document.QueryString.Keys.SingleOrDefault(key => key.Equals("callid", StringComparison.OrdinalIgnoreCase));

string callid;
HtmlPage.Document.QueryString.TryGetValue(keyName, out callid) 

如果您有许多字典查找,您还可以使用不区分大小写的比较器将整个 QueryString 字典转换为新字典。

var insensitiveQueryString = HtmlPage.Document.QueryString.ToDictionary(pair => pair.Key, pair => pair.Value, StringComparer.OrdinalIgnoreCase);
于 2012-04-27T07:53:17.447 回答