Ate*_*ral 14 c# dictionary casting
我正在使用一个返回键值集合的API作为Dictionary<string, string>.我需要将其转换为Dictionary<string, object>.我有一种感觉,应该有一种方法来做这个转换/映射而不"手动"循环每个键值对,但谷歌搜索或C#对象引用没有立即产生解决方案.
Jar*_*Par 25
请尝试以下方法
var newMap = oldMap.ToDictionary(pair => pair.Key, pair=>(object)pair.Value);
Run Code Online (Sandbox Code Playgroud)
没有循环,在恒定时间内将 a 映射Dictionary{T, U}到:Dictionary{T, object}
class DictionaryWrapper<T, U> : IDictionary<T, object>
{
readonly Dictionary<T, U> inner;
public DictionaryWrapper(Dictionary<T, U> wrapped)
{
this.inner = wrapped;
}
#region IDictionary<T,object> Members
public void Add(T key, object value) { inner.Add(key, (U)value); }
public bool ContainsKey(T key) { return inner.ContainsKey(key); }
public ICollection<T> Keys { get { return inner.Keys; } }
public bool Remove(T key) { return inner.Remove(key); }
public bool TryGetValue(T key, out object value)
{
U temp;
bool res = inner.TryGetValue(key, out temp);
value = temp;
return res;
}
public ICollection<object> Values { get { return inner.Values.Select(x => (object)x).ToArray(); } }
public object this[T key]
{
get { return inner[key]; }
set { inner[key] = (U)value; }
}
#endregion
#region ICollection<KeyValuePair<T,object>> Members
public void Add(KeyValuePair<T, object> item) { inner.Add(item.Key, (U)item.Value); }
public void Clear() { inner.Clear(); }
public bool Contains(KeyValuePair<T, object> item) { return inner.Contains(new KeyValuePair<T, U>(item.Key, (U)item.Value)); }
public void CopyTo(KeyValuePair<T, object>[] array, int arrayIndex) { throw new NotImplementedException(); }
public int Count { get { return inner.Count; } }
public bool IsReadOnly { get { return false; } }
public bool Remove(KeyValuePair<T, object> item) { return inner.Remove(item.Key); }
#endregion
#region IEnumerable<KeyValuePair<T,object>> Members
public IEnumerator<KeyValuePair<T, object>> GetEnumerator()
{
foreach (var item in inner)
{
yield return new KeyValuePair<T, object>(item.Key, item.Value);
}
}
#endregion
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
foreach (var item in inner)
{
yield return new KeyValuePair<T, object>(item.Key, item.Value);
}
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
通过一些更通用的参数,您可以进一步概括此类,以便将 a 映射Dictionary{A, B}到 a Dictionary{C, D}。
| 归档时间: |
|
| 查看次数: |
7941 次 |
| 最近记录: |