C# 如何修复跨机器的字符串比较 我有本地机器,其语言环境为:en US 我已经用locale构建了机器:en US POSIX 我有prod(AWS dotnet lambda)机器,其语言环境为:en_US.UTF-8
我有一段代码可以为数据库字段获得适当的大小写:C# 如何修复跨机器的字符串比较 我有本地机器,其语言环境为:en US 我已经用locale构建了机器:en US POSIX 我有prod(AWS dotnet lambda)机器,其语言环境为:en_US.UTF-8,c#,.net-core,locale,string-comparison,C#,.net Core,Locale,String Comparison,我有一段代码可以为数据库字段获得适当的大小写: public string FixFieldCaseName(string fieldName) { var mappings = new Dictionary<string, string>(StringComparer.CurrentCultureIgnoreCase); mappings.Add("test", "Test"); if (mappings.TryGetValue(fieldName, ou
public string FixFieldCaseName(string fieldName)
{
var mappings = new Dictionary<string, string>(StringComparer.CurrentCultureIgnoreCase);
mappings.Add("test", "Test");
if (mappings.TryGetValue(fieldName, out var fixedFieldName) && fixedFieldName != fieldName)
{
_logger.Debug("stuff");
return fixedFieldName;
}
return fieldName;
}
公共字符串FixFieldCaseName(字符串字段名)
{
var映射=新字典(StringComparer.CurrentCultureInoRecase);
添加(“测试”、“测试”);
if(mappings.TryGetValue(fieldName,out var fixedFieldName)&&fixedFieldName!=fieldName)
{
_调试(“东西”);
返回fixedFieldName;
}
返回字段名;
}
这可以在本地和lambda上工作,但不能在构建机器上工作。它返回原始字符串
本地和Lambda:输入(“测试”)->输出(“测试”)
构建机:输入(“测试”)->输出(“测试”)
由于语言环境(en US POSIX),它在Ubuntu上不起作用:
字段名用于在数据库中执行查询
解决这个问题的正确方法是什么
System.Globalization.CultureInfo.CurrentCulture=new System.Globalization.CultureInfo(“en-US”)代码>
感谢您的帮助。要使用的区域性是根据字符串的用途确定的。基于方法名FixFieldCaseName()
,是否有可能在序列化和/或反射期间使用此方法按字段名访问数据?查看何时使用每一个的指导信息。@dbc字符串用于在postgres DB中执行查询。如果它们是字段名,那么您可能希望在所有计算机、区域性和平台上生成相同的查询。如果是这样,请使用ordinallingorecase
。但是如果传入的字段名是用户键入的内容,则可能需要使用CurrentCultureIgnoreCase
。例如,在土耳其语中,i
的大写字母是İ
(大写虚线i),请参见。对于土耳其用户,您希望i
等同于i
还是İ
。我们不会有非英语的字段名。但即使我们有土耳其字段,由于古怪的POSIX语言环境,CurrentCultureInoRecase在构建机器上也不起作用。