我有一个名为UnicodeMap的模型类,用于表示十六进制unicode值及其辅助和Amharic字符的值。
public sealed class UnicodeMap
{
public string Letter;
public string Consonant;
public string Vowel;
}
我已将映射存储在CSV中并在运行时读取以填充字典。
以下是读取和填充字典的代码的摘录:
private Dictionary<string, UnicodeMap> _unicodeMap;
void ReadMap()
{
var engine = new FileHelperAsyncEngine<UnicodeMap>();
using (engine.BeginReadFile(MapFile))
{
foreach (var record in engine)
{
_unicodeMap.Add(record.Letter, record);
}
}
}
当我尝试使用TryGetValue从字典中获取值时,它总是返回false:
public void Translate(string text)
{
var words = text.Split(' ', '.');
foreach (var word in words)
{
var chr = Char.Parse(word);
var unicodeStr = @"\u" + ((int) chr).ToString("X4");
UnicodeMap map;
if (_unicodeMap.TryGetValue(unicodeStr, out map)) //returns false
{
_animator.SetTrigger(map.Consonant);
_animator.SetTrigger(map.Vowel);
};
}
}
例如,当字符串为“ሀ”时, unicodeStr 变量的值为“\ u1200”。我有一个字符串,其值为“\ u1200”,作为字典中的一个键。但是, TryGetValue 似乎无法在字典中找到密钥。
我该如何解决这个问题?可能的原因是什么?
编辑:添加了一个调试器的gif,查看_ unicodeMap 字典的值
答案 0 :(得分:1)
在gif中看起来有点难,但是在字典键中的文本后面看起来有一个尾随空格,所以你实际上是在比较“\ u1200”和“\ u1200”。
通过在密钥上执行.Trim()
来修复填充字典的方式。
private Dictionary<string, UnicodeMap> _unicodeMap;
void ReadMap()
{
var engine = new FileHelperAsyncEngine<UnicodeMap>();
using (engine.BeginReadFile(MapFile))
{
foreach (var record in engine)
{
_unicodeMap.Add(record.Letter.Trim(), record); //Added .Trim()
}
}
}
或修复FileHelperAsyncEngine
以不在Letter
属性中留下尾随空格。