这是列表<字符串> LSTA
lstA 可能包含值(数据类型字符串),如: 第一个例子
1
1.00
1000.01
1,002.98
.........
或 listA 可能包含以下值:第二个示例
1
1.00
1000,01
1.002,98
.........
我正在尝试将此列表传递给方法,它会返回一个字符串“german”或“us”
我正在尝试这个:
private static string ReturnCulture(List<string> lst)
{
string cull = "";
foreach (string s in lst)
{
if (s.Contains(".") && s.Contains(","))
{
cull = "german";
break;
}
else if (!s.Contains(".") && s.Contains(","))
{
cull = "german";
}
else if (s.Contains(".") && !s.Contains(","))
{
cull = "us";
break;
}
else if (!s.Contains(".") && !s.Contains(","))
{
continue;
}
}
return cull;
}
这对前3个值很好。但当我得到( 1,002.98 )或(“1.002,98”)这两个满足德国条件。
如何解决这个问题?全球化课程能否容易地发现它是哪种文化? lstA 的给定示例实际上是随机的。但它可以是第一个例子或第二个。
答案 0 :(得分:0)
如果你试图解析只有几种文化的数字,你可能会发现使用带有文化格式参数的double.parse有用。见Double parse with culture format
答案 1 :(得分:0)
您无法明确地创建一个方法,给定一组字符串将能够告诉您字符串是格式化为英语还是德语。您可以编写一个方法,告诉您是否可以将所有字符串解析为英语或德语。由于您希望解析失败,因此您应该使用Double.TryParse,如下所示:
private static bool AreAllStringsValidNumberRepresenationsForCulture(CultureInfo ci, List<string> lst)
{
foreach (string s in lst)
{
double number;
if (!Double.TryParse(s, NumberStyles.Any, ci, out number)
{
return false;
}
}
return true;
}
采用显式输入而不是依赖于启发式方法总是更好,所以如果有任何方法强制使用标准数字表示,那么你会更好。
答案 2 :(得分:0)
您可以尝试使用文化
解析它们例如,
public static string GetCulture(this string value)
{
var doubleValue = default(double);
var germanCultureInfo = new CultureInfo("de-DE");
var englishCultureInfo = new CultureInfo("en-US");
if (double.TryParse(value, NumberStyles.AllowDecimalPoint, germanCultureInfo, out doubleValue))
{
return "german";
}
else if (double.TryParse(value, NumberStyles.AllowDecimalPoint, englishCultureInfo, out doubleValue))
{
return "us";
}
return string.Empty; ;
}