이 질문에 대한 해결책은 =>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()];
}
나는이 있기 때문에이 경우에 작동합니다 알고있는 일대일 형식과 문자열 표현 사이.
하지만 냄새가 아주 좋지 않으며 다른 상황에서는 작동하지 않습니다.
더 좋은 방법이 있나요?