我不确定我是否正确解释了这一点,或者问题是否足够清楚,但这就是我想要做的。
我创建了一个名为 index 的对象,它存储 IList 中元素的索引。这是我的对象索引。
var index = new
{
PhoneReportID = 1,
CSQID = i.NextIndex(),
CallsPresented = i.NextIndex(),
AvgQueueTime = i.NextIndex(),
CallsHandled = i.NextIndex(),
AvgAnswerSpeed = i.NextIndex(),
AvgHandleTime = i.NextIndex(),
CallsAbandoned = i.NextIndex(),
AvgAbandonTime = i.NextIndex(),
AvgCallsAbandoned = i.NextIndex(),
CallsDequeued = i.NextIndex(),
AvgDequeueTime = i.NextIndex(),
CallsHandledByOther = i.NextIndex(),
MaxQueueTime = z.NextIndex(),
MaxHandleTime = z.NextIndex(),
MaxAbandonTime = z.NextIndex(),
MaxCallsAbandoned = z.NextIndex(),
MaxDequeueTime = z.NextIndex(),
};
这是我的泛型方法,它从泛型类型获取属性并根据索引中的元素位置设置值。
private IEnumerable<T> Parse(IList<string[]> rows, object index)
{
Type indexType = index.GetType();
IList<PropertyInfo> indexProperties = indexType.GetProperties();
int k = 0;
var classType = typeof(T);
IList<PropertyInfo> classProperties = classType.GetProperties();
foreach (var property in classProperties)//.Select(x => x.ToString()).Select(y => y.Trim()).ToList())
{
var propGetter = property.GetGetMethod();
var propSetter = indexType.GetProperty(property.Name).GetSetMethod();
var valueToSet = rows[int.TryParse(index[indexType.GetProperty(property.Name)],out k)];
}
throw new Exception();
}
我这样做的原因有很多,但我这样做的主要原因之一是学习 c# 中的反射。
因此,行是通过读取具有特定分隔符的文件获得的列表。由于列表中的每个值都对应于类的某些属性,因此我创建了一个名为 index 的对象,其名称与类的属性名称相同,并为其分配了值在 IList 中的位置。现在,我想使用索引的属性名称检索行中的值,该索引返回类的属性名称与对象索引的属性名称相同的位置。我上面所做的方式对于检索值是不正确的,但我写它是为了清楚我打算实现的目标。希望我足够清楚,有人可以回答这个问题。