我正在使用 Value Injecters 使用 LoopValueInjection 将一种类型映射到另一种类型,并使用一些自定义逻辑覆盖 SetValue(object v) 方法。我试图检测何时传入 HashSet 并通过 HashSet 并对其中的每个项目应用一种方法以进行一些清理。我遇到的问题是因为参数只是一个对象,我不知道 HashSet 中的项目类型是什么。例如,它可以是 HashSet 或 HashSet。
这是我目前拥有的代码,但我收到了 InvalidCastException。
protected override object SetValue(object v)
{
if (type.Name == "HashSet`1")
{
var genericType = type.GetGenericArguments()[0];
// this line throws the InvalidCastException
var cleanHashSet = (HashSet<object>)Activator.CreateInstance(type);
foreach (var item in (HashSet<object>)v) // I'm sure this cast will throw as well
{
cleanHashSet.Add(Clean(item));
}
return cleanHashSet;
}
return base.SetValue(v);
}
我想主要的问题是,一旦我确定它实际上是某种 HashSet,如何循环遍历作为对象传入的 HashSet?我还认为我还需要创建一个新的特定类型的空 HashSet,以便我可以将每个被清理的项目放入其中。