在解決方案中,我已經解決了這個問題=>General type conversion without risking Exceptions(請參閱問題底部的編輯),我需要緩存兩種類型之間轉換的方法。收集兩個鍵
因此,給定Type1和Type2我需要檢索一個方法。
在這個問題的答案=>What is the best C# collection with two keys and an object?建議使用詞典詞典。這與我所做的相似。
但我不喜歡它。它沒有邏輯上與集合意味着代表什麼。也要檢索一個值,我必須做的:
if (!_Types.ContainsKey (s.GetType()))
{
type1Cache = new Dictionary<Type, ConversionCache>();
_Types.Add (s.GetType(), type1Cache);
}
else
{
type1Cache = _Types[s.GetType()];
}
if (!type1Cache.ContainsKey (value.GetType()))
{
// We havent converted this type before, so create a new conversion
type2Cache = new ConversionCache (s.GetType(), value.GetType());
// Add to the cache
type1Cache.Add (value.GetType(), type2Cache);
}
else
{
type2Cache = type1Cache[value.GetType()];
}
這是一個有點長囉。
我只想做這樣的事情
if (!_Types.ContainsKey (s.GetType(), value.GetType()))
{
cache = new ConversionCache (s.GetType(), value.GetType());
_Types.Add (s.GetType(), value.GetType(), cache);
}
else
{
cache = _Types[s.GetType(), value.GetType()];
}
一個解決辦法是來串聯類型的字符串值。類似於:
if (!_Types.ContainsKey (s.GetType().ToString() + ":" + value.GetType().ToString()))
{
cache = new ConversionCache (s.GetType(), value.GetType());
_Types.Add (s.GetType().ToString() + ":" + value.GetType().ToString(), cache);
}
else
{
cache = _Types[s.GetType().ToString() + ":" + value.GetType().ToString()];
}
我知道它可以在此實例中工作,因爲在類型及其字符串表示之間存在一對一關係。
但是這種氣味很糟糕,並且在其他情況下不起作用。
有沒有更好的方法來做到這一點?