c# - 如何删除仅类型不同但使用非默认构造函数的方法之间的重复?

标签 c# .net optimization methods

您好,我有很多方法(以下 2 个示例)看起来几乎完全相同。区别在于处理的JSON 漏洞的名称返回列表的类型添加到列表的对象的类型。我知道这些示例方法还需要对其主体进行一些优化,但情况是传递返回值的类型和方法当前需要的类的类型并使其全部工作。如果可能的话,我想避免使用强制转换来代替调用方法。

方法一

    public static List<Box> JsonToListOfBoxes(string data)
    {
        List<Box> ListOfBoxes = new List<Box>();
        if(!string.IsNullOrEmpty(data))
        {
            JObject productsJson = JObject.Parse(data);
            JToken jtkProduct;

            jtkProduct = productsJson["boxes"];

            if(jtkProduct != null)
                if(jtkProduct.HasValues)
                {
                    int childrenCount = productsJson["boxes"].Count();
                    for(int x = 0;x < childrenCount;x++)
                        ListOfBoxes.Add(new Box(productsJson["boxes"][x]));
                }
        }

        return ListOfBoxes;
    }

方法二

    public static List<Envelope> JsonToListOfEnvelopes(string data)
    {
        List<Envelope> ListOfEnvelopes = new List<Envelope>();
        if(!string.IsNullOrEmpty(data))
        {
            JObject productsJson = JObject.Parse(data);
            JToken jtkProduct;

            jtkProduct = productsJson["envelopes"];

            if(jtkProduct != null)
                if(jtkProduct.HasValues)
                {
                    int childrenCount = productsJson["envelopes"].Count();
                    for(int x = 0;x < childrenCount;x++)
                        ListOfEnvelopes.Add(new Envelope(productsJson["envelopes"][x]));
                }
        }

        return ListOfEnvelopes;
    }

最佳答案

使用泛型你可以改变如下:(没有参数化的泛型构造函数)

    public static List<T> JsonToListOfEnvelopes<T>(string data, string searchString, Func<string, T> creator)
    {
        List<T> ListOfEnvelopes = new List<T>();
        if (!string.IsNullOrEmpty(data))
        {
            JObject productsJson = JObject.Parse(data);
            JToken jtkProduct;

            jtkProduct = productsJson[searchString];

            if (jtkProduct != null)
                if (jtkProduct.HasValues)
                {
                    int childrenCount = productsJson[searchString].Count();
                    for (int x = 0; x < childrenCount; x++)
                        ListOfEnvelopes.Add(creator(productsJson[searchString][x]));
                }
        }

        return ListOfEnvelopes;
    }

你可以称它为

        var result = JsonToListOfEnvelopes("data", "boxes", c => { return new Box(c); });
        var result = JsonToListOfEnvelopes("data", "envelopes", c => { return new Envelope(c); });

关于c# - 如何删除仅类型不同但使用非默认构造函数的方法之间的重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31346572/

相关文章:

C# 循环字典并对键的值求和

c# - MVC 6 多个获取方法

.net - 方法会影响对象的大小吗?

c# - JIT .Net 编译器错误?

c# - 对象内存优化问题

c# - 嵌入式 IronPython 中的错误详细信息

c# - Razorpages 上的 ASP.NET Core 声明 null 处理

c# - .NET 列表框 : in ItemChecked event know if item was clicked

c - 将多个二维数组复制到一个一维数组的最快方法(C 语言)

c# - 在托管代码中,如何实现良好的引用位置?