基於這個答案Get the subdomain from a URL,我試圖使用code.google.com/p/domainname-parser/將使用Public Suffix從publicsuffix.org列出來獲取管理我的Cookie收集的子域和域。將Linq轉換爲正常的C#.NET 2.0,用於使用publicsuffix.org的域名解析器代碼
在當前時刻,Domainname-parser是我在互聯網上找到的唯一.NET代碼,它實現了publicsuffix.org的列表。
爲了使用域名解析器我想做出改變的源代碼,以便它能夠:
- 使用.NET 2.0中
- 接受Uri對象來解析主機到子域名,域名和頂級域名。
- 如果更改LastModified,將自動使用WebRequest和WebResponse從publicsuffix.org下載最新列表。
因此,它會變得更加有用並且始終更新。 (2)和(3)不會成爲問題,但(1)現在是我的焦點。
當前的域名解析器是v1.0,爲了使用在代碼中使用Linq的.NET 3.5而構建。爲了使它與.NET 2.0兼容,我需要將Linq代碼轉換爲非Linq,這使我瞭解公共後綴列表規則。這是普通,通配符和例外規則。但是我不瞭解Linq,以及它如何轉換回正常的方式。
轉換工具可能是有用的,但更好的是我審查並逐行修改它。
現在我的問題是我該如何轉換它?從FindMatchingTLDRule方法如代碼在DOMAINNAMES類:
// Try to match an wildcard rule:
var wildcardresults = from test in TLDRulesCache.Instance.TLDRuleList
where
test.Name.Equals(checkAgainst, StringComparison.InvariantCultureIgnoreCase)
&&
test.Type == TLDRule.RuleType.Wildcard
select
test;
而且這樣的:
var results = from match in ruleMatches
orderby match.Name.Length descending
select match;
什麼是簡單的引導線遵循? 或任何免費工具將上面的這一句話轉換爲.NET 2.0中的正常C#代碼。
我相信不涉及數據庫,就像他們處理集合的方式一樣。
我也試圖聯繫域名解析器所有者來改進代碼並幫助我解決這個問題。
感謝
CallMeLaNN
感謝您的快速響應。它似乎工作。 現在我想將IEnumerable更改爲列表,以便我可以使用like wildcardresults.Count。 所以新的語句變成:List exceptionresults =(List )MatchExceptions(TLDRulesCache.Instance.TLDRuleList,checkAgainst); 因爲我無法更改方法IEnumerable MatchExceptions()到列表 MatchExceptions()因爲使用關鍵字「yield」。 我認爲你的意思是類型。 我沒有看到任何改變checkAgainst值的代碼。 –
CallMeLaNN
2009-10-09 07:43:43
好的,我會編輯該方法。 – 2009-10-09 07:48:34
Oic,即收益率意味着。 TQVM。 只是我編輯的另一個代碼。我混淆了「orderby」。不同的情況。我不知道如何在if語句中比較以測試match.Name.Length以與之前的匹配對象進行比較。 幾乎完成。 – CallMeLaNN 2009-10-09 07:56:34