我有许多类(超过40个),每个类都有许多字段(通常是字符串或列表)。然后,我有大约8-10个函数在每个类上工作(但函数不是相关类的一部分...),除了它所使用的字段名称之外,每个函数都是相同的。所以:
public static class CMix{
private static List<CType1> gListType1;
private static List<CType2> gListType2;
//...
public static Tuple<bool, String> FetchType1F1(int aIndex){
//Bounds checking + return item from gListType1.
}
public static Tuple<boo, String> FetchType1F2(int aIndex){
//Bounds checking + return item from gListType1.
}
//...
public static Tuple<bool, ulong> FetchType2AB2(int aIndex){
//Bounds checking + return item from gListType2.
}
}
public class CType1{
public String mF1;
public String mF2;
public ulong mF3;
}
public class CType2{
public String mAB1;
public ulong mAB2;
}
上面的代码表明这些方法只是简单的获取/设置方法,它们比这更复杂,尽管为了简洁起见,我错过了这个。这也是为什么这些方法不是匹配类的一部分的原因(即类CType1中的FetchType1F1)。
困扰我的是,除了处理的字段和List之外,每个方法的内容几乎完全相同。我想我可以使用泛型来创建几个基本方法,但我正在努力研究如何引用正确的字段:
public static String FetchGenericString <ListType> (List<ListType> aList, int aIndex) {
//For now return empty string.
return "";
}
public static Tuple<bool, String> FetchType1F1(int aIndex){
String mResult=FetchGenericString(gListType1, 0);
}
我不确定如何将字段名称传递给FetchGenericString以便我可以调用它:
String mResult=FetchGenericString(gListType1, 0, mF1);
这甚至可能不是问题的最佳解决方案,所以我会听取任何建议。
谢谢。
答案 0 :(得分:1)
您可以修改方法以包含要查找其属性的访问者:
public static TValue FetchValue<TList, TValue>(List<TList> aList, int aIndex, Func<TList, TValue> valueSelector)
{
return valueSelector(aList[aIndex]);
}
然后致电
String mResult=FetchGenericString(gListType1, 0, a => a.mF1);
必须添加,但这些变量名前缀不会使您的代码读取变得非常简单。你应该考虑删除它们。