gpt4 book ai didi

c# - 获取给定类型的集合的引用

转载 作者:太空狗 更新时间:2023-10-29 20:27:10 25 4
gpt4 key购买 nike

我有几本字典:

Dictionary<int, Type1> Type1Dictionary { get; set; }
Dictionary<int, Type2> Type2Dictionary { get; set; }
Dictionary<int, Type3> Type3Dictionary { get; set; }
Dictionary<int, Type4> Type4Dictionary { get; set; }

在哪里Typei (i = 1..4)派生自相同的基类 ( BaseType )。我想要一个返回给定类型的字典引用的方法。稍后,我将对该字典执行一些操作,例如添加或删除:

Type1 example = new Type1(); 
var dic = GetDictionary(example);
dic.Add(example.ID, example);

注意:我不想将我的词典设置为 Dictionary<int, BaseType>

我可以写这样的东西,但不会返回对字典的引用:

Dictionary<int, BaseType> GetDictionary(BaseType myObject)
{
var dic = new Dictionary<int, BaseType>();
if(myObject is Type1)
{
//ideally I would return my Type1Dictionary here but I can't due type incompatibility
foreach(var x in Type1Dictionary)
{
dic.Add(x.Key, x.Value);
}
return dic;
}
if(myObject is Type2) { /*...*/ }
if(myObject is Type3) { /*...*/ }
if(myObject is Type4) { /*...*/ }
}

编辑:

我真正想要的是避免以下结构:

AddObject(BaseType x)
{
Type1 x1 = x as Type1;
if(x1 != null) { Type1Dictionary.Add(x1.ID, x1); }

Type2 x2 = x as Type2;
if(x2 != null) { Type2Dictionary.Add(x2.ID, x2); }

Type3 x3 = x as Type3;
if(x3 != null) { Type3Dictionary.Add(x3.ID, x3); }

Type4 x4 = x as Type4;
if(x4 != null) { Type4Dictionary.Add(x4.ID, x4); }
}

RemoveObject(BaseType x)
{
Type1 x1 = x as Type1;
if(x1 != null) { Type1Dictionary.Remove(x1.ID); }

Type2 x2 = x as Type2;
if(x2 != null) { Type2Dictionary.Remove(x2.ID); }

Type3 x3 = x as Type3;
if(x3 != null) { Type3Dictionary.Remove(x3.ID); }

Type4 x4 = x as Type4;
if(x4 != null) { Type4Dictionary.Remove(x4.ID); }
}

而是:

AddObject(BaseType x)
{
var dic = GetDictionary(x);
dic.Add(x.ID, x);
}

RemoveObject(BaseType x)
{
var dic = GetDictionary(x);
dic.Remove(x.ID);
}

最佳答案

这可以在广告安全等方面进行完善。但是您应该能够了解基本思想:

public interface IEntity
{
int ID { get; }
}

public class Superset<T> where T : IEntity
{
public Dictionary<Type, Dictionary<int, T>> m_Map =
new Dictionary<Type, Dictionary<int, T>>();

private Dictionary<int, T> GetDictionary(Type t)
{
Dictionary<int, T> result = null;
if (!m_Map.TryGetValue(t, out result))
{
result = new Dictionary<int, T>();
m_Map.Add(t, result);
}
return result;
}

public void Add<K>(K item) where K : T
{
GetDictionary(typeof(K)).Add(item.ID, item);
}

public bool Remove<K>(K item) where K : T
{
return GetDictionary(typeof(K)).Remove(item.ID);
}
}

关于c# - 获取给定类型的集合的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33647042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com