如何在编译时对未知名称的列表调用Add()

  • 本文关键字:列表 调用 Add 编译 未知 c#
  • 更新时间 :
  • 英文 :


当名称未知时,如何调用unknowList.AddRange(elements)

我有以下代码,但addMethod始终为空。有什么原因吗?

public class Tree : Harvestable
{
}
public class JobManager
{
List<Tree> treeSelections = new List<Tree>();

public void OnMarkHarvestableSignal(List<Harvestable> selections)
{
string fieldName = selections[0].GetType()
.ToString()
.ToLower() + "Selections";
FieldInfo field = this.GetType()
.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance);
if (field is null)
throw new Exception($"Field {fieldName} not found");

MethodInfo addMethod = field.GetType()
.GetMethod("AddRange");
addMethod.Invoke(field, new object[] {selections});
}
}

您可能需要Harvestable实例来标识自己:

public abstract class Harvestable  // or however it’s actually defined
{
public abstract Category Category { get; }
}

其中,Category可以是具有每个类的条目的enum,或者objectstring,或者一些自定义的类似符号的类型。

然后JobManager维护一个列表字典:

public class JobManager
{
Dictionary<Category, List<Harvestable>> CategorySelections
= new Dictionary<Category, List<Harvestable>>();
public void OnMarkHarvestableSignal(List<Harvestable> selections)
{
CategorySelections[selections[0].Category].AddRange(selections);
}
}

相关内容

  • 没有找到相关文章

最新更新