在我的C#程序中,我想通过反射将项目添加到INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;
。使用HashSet<T>
这不是问题,因为我可以将列表强制转换为非通用List<T>
接口:
IList
现在我想对foreach (PropertyInfo property in myClass.GetType().GetProperties())
{
object value = property.GetValue(myClass);
IList valueAsIList = value as IList;
if (valueAsIList != null)
valueAsIList.Add(item2Insert);
}
做同样的事情,但是我没有像HashSet<T>
这样的非通用合约,我可以将其转换为IList
方法。还有其他办法吗?
答案 0 :(得分:4)
由于您已经在使用反射,为什么不尝试查找Add方法?
var addMethod = value.GetType().GetMethods().FirstOrDefault(m => m.Name == "Add");
//validate this method; has it been found? What should we do if it didnt? Maybe it should be SingleOrDefault
addMethod.Invoke(value, valueToAdd)
可能会添加更多验证,而不是......:)
答案 1 :(得分:1)
您可以使用dynamic
解决此问题。它会照顾&#34;照顾&#34;反思为你工作。
using System;
using System.Collections.Generic;
namespace Bob
{
public class Program
{
static void Main(string[] args)
{
var hash = new HashSet<int>();
Console.WriteLine(hash.Count);
Add(hash);
Console.WriteLine(hash.Count);
Console.ReadLine();
}
private static void Add(dynamic hash)
{
hash.Add(1);
}
}
}