0

我有许多类(超过 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;
}

上面的代码表明这些方法只是 get/set 方法,它们比这更复杂一些,尽管为简洁起见,我忽略了这一点。这也是方法不属于匹配类的原因(即类 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);

这甚至可能不是解决问题的最佳方法,所以我会听取任何建议。

谢谢你。

4

1 回答 1

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);

但是必须添加,变量名的这些前缀不会使您的代码非常容易阅读。您应该考虑删除它们。

于 2012-06-14T10:33:41.630 回答