<Class> 通过字符串访问列表的字段



我有一个包含字节数组的类MyData的列表。我正在创建一个函数,我可以向该函数传递List和一个字符串来访问字段,并对它们进行一些操作——主要是连接。

我正在努力处理的部分是通过字符串访问类字段。我不确定我应该使用林克还是反射,还是两者的结合。

我有很多数据,所以性能也是一个考虑因素。

感谢

public class MyData
{
public byte[] vertices;
public byte[] indicies;
}    
public byte[] ProcessData(List<MyData> inData, string fieldName)
{          
byteArray = new byte[inData.Sum(x => x."fieldName").Length];
offset = 0;
for (int i = 0; i < inData.Count; i++) {
Buffer.BlockCopy(inData[i]."fieldName", 0, ret, offset, inData[i]."fieldName".Length);
offset += inData."fieldName".Length;
}
return byteArray;
}
List<MyData> AllMyData = new List<MyData>();
//Load some data (omitted) 
var AllVertices = ProcessData(AllMyData, "vertices"); 
var AllIndicies = ProcessData(AllMyData, "indicies"); 
public byte[] ProcessData(List<MyData> inData, string fieldName)
{          
var field = inData.GetType().GetField(fieldName);
if (field == null)
throw new ArgumentException("Invalid field name", nameof(fieldName));
byte[] bytesField = field.GetValue(inData) as byte[];
var byteArray = new byte[bytesField.Sum().Length];
var offset = 0;
for (int i = 0; i < inData.Count; i++) {
Buffer.BlockCopy(bytesField[i], 0, ret, offset, bytesField.Length);
offset += bytesField.Length;
}
return byteArray;
}

如果可以不将字段选择表示为字符串,而是表示为函数,则If将更快(比反射更快(:

public byte[] ProcessData(List<MyData> inData, Func<MyData, byte[]> field)
{          
var byteArray = new byte[inData.Sum(x => field(x).Length)];
var offset = 0;
for (int i = 0; i < inData.Count; i++) {
Buffer.BlockCopy(field(inData[i]), 0, byteArray, offset, field(inData[i]).Length);
offset += field(inData[i]).Length;
}
return byteArray;
}
var allVertices = ProcessData(AllMyData, x => x.vertices); 
var allIndicies = ProcessData(AllMyData, x => x.indicies);  

最新更新