2015-04-27 29 views
0

某些类型具有TryParse方法,例如它是Int32,Int64,Boolean等。它允许在没有try \ catch块的情况下检查字符串值。当许多不正确的值在循环中处理时,它会对生产力产生很大影响。我需要为LCID的字符串值做同样的事情。但CultureInfo类没有TryParse方法。如何在没有try catch块的情况下检查LCID的验证?

CultureInfo culture = null; 
try { 
    culture = CultureInfo.GetCultureInfo(Convert.ToInt32(lcid, 16)); 
} 
catch { 
} 

我该如何重写这段代码?

+2

有什么不对的代码?如果框架提供了这种方法,它仍然需要尝试/捕获。如果你关心代码的简洁性,那么你可以在字符串类型上创建一个扩展方法。 –

+0

不,我不关心代码的简洁性。但是当很多不正确的值在循环中处理时,它会对生产力产生很大的影响。在这里,我展示了一些关于比较'try \ catch'变体和'TryGetObjectId'(这是TryParse'的一些类比)的结果:https://sites.google.com/site/bushmansnetlaboratory/sendbox/stati/database/比较 00:05:30,4050567和00:00:00,7027717。生产力差异很大。 –

回答

3

你可以缓存所有由LCID CultureInfo的对象字典:

var culturesByLcid = CultureInfo 
    .GetCultures(CultureTypes.AllCultures) 
    .ToDictionary(c => c.LCID, c => c); 

,并使用TryGetValue像:

CultureInfo found; 
if (culturesByLcid.TryGetValue(lcid, out found)) 
{ 
    ... 
} 
相关问题