繁体   English   中英

如何使我的程序与重复代码更有效?

[英]How can I make my program with reoccurring code more effective?

这是我当前的代码,正如您所看到的,其中很大一部分是重复出现的代码,只需对其进行一些调整,例如输入、输出名称和链接。 有什么办法可以将两个相似的代码块组合在一起,但仍然得到相同的结果。

以后要多做一些类似纯洁拳和奸商的东西。

        if (userinput.Contains("pf")||userinput.Contains("all"))
        {

            //PURITY FIST
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://steamcommunity.com/market/priceoverview/?currency=3&appid=440&market_hash_name=Genuine%20Purity%20Fist");
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader stream = new StreamReader(response.GetResponseStream());
            var final_response = stream.ReadToEnd();


            // Converts the unicode to string correctValue.
            string correctValue = "Euro";
            StringBuilder sb = new StringBuilder(final_response);
            if (sb.ToString().Contains("\\u20ac"))
            {
                sb.Replace("\\u20ac", correctValue);
            }

            dynamic items = JObject.Parse(sb.ToString());

            bool success = items.success;
            string lowest = items.lowest_price;
            string volume = items.volume;
            string median = items.median_price;

            // Create a test object of RootObject class
            RootObject r = new RootObject(success, lowest, volume, median);

            // Calculation example
            double num1 = double.Parse(r.FixComma(r.lowest_price, correctValue), CultureInfo.InvariantCulture);
            double num2 = double.Parse(r.FixComma(r.median_price, correctValue), CultureInfo.InvariantCulture);



            Console.WriteLine("Genuine Purity Fist");

            if (success == true)
            {
                if (num1 >= num2)
                {
                    Console.WriteLine(r.median_price);
                    Console.WriteLine();
                    if (userinput.Contains("pf"))
                    {
                        Console.ReadKey();
                    }
                }

                else
                {
                    Console.WriteLine(r.lowest_price);
                    Console.WriteLine();
                }
            }
        }

    if (userinput.Contains("bb")||userinput.Contains("all"))
    {
        //BACKBITER'S BILLYCOCK
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://steamcommunity.com/market/priceoverview/?currency=3&appid=440&market_hash_name=Genuine%20Backbiter%27s%20Billycock");
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader stream = new StreamReader(response.GetResponseStream());
        var final_response = stream.ReadToEnd();


        // Converts the unicode to string correctValue.
        string correctValue = "Euro";
        StringBuilder sb = new StringBuilder(final_response);
        if (sb.ToString().Contains("\\u20ac"))
        {
            sb.Replace("\\u20ac", correctValue);
        }

        dynamic items = JObject.Parse(sb.ToString());

        bool success = items.success;
        string lowest = items.lowest_price;
        string volume = items.volume;
        string median = items.median_price;

        // Create a test object of RootObject class
        RootObject r = new RootObject(success, lowest, volume, median);

        // Calculation example
        double num1 = double.Parse(r.FixComma(r.lowest_price, correctValue), CultureInfo.InvariantCulture);
        double num2 = double.Parse(r.FixComma(r.median_price, correctValue), CultureInfo.InvariantCulture);



        Console.WriteLine("Backbiter's Billycock");

        if (success == true)
        {
            if (num1 >= num2)
            {
                Console.WriteLine(r.median_price);
                Console.WriteLine();
                Console.ReadKey();
            }

            else
            {
                Console.WriteLine(r.lowest_price);
                Console.WriteLine();
                if (userinput.Contains("bb"))
                {
                    Console.ReadKey();
                }
            }
        }
    }

            else
            {
                Console.WriteLine("Item not found!");
                Main(args);
            }
        }
    }
}





public class RootObject
{
    public bool success { get; set; }
    public string lowest_price { get; set; }
    public string volume { get; set; }
    public string median_price { get; set; }

    public RootObject(bool success, string lowest_price, string volume, string median_price)
    {
        this.success = success;
        this.lowest_price = lowest_price;
        this.volume = volume;
        this.median_price = median_price;
    }

    public string FixComma(string value, string currency)
    {
        string correctValue = ".";
        string correctValue2 = "";
        StringBuilder sb = new StringBuilder(value);
        if (sb.ToString().Contains(","))
        {
            sb.Replace(",", correctValue);
        }
        if (sb.ToString().Contains(currency))
        {
            sb.Replace(currency, correctValue2);
        }
        return sb.ToString();
    }
}

两个if语句之间有一些区别:

  1. if子句的字符串(“pf”或“bb”)
  2. URL 字符串(以“Purity%20Fist”或“Backbiter%27s%20Billycock”结尾)
  3. Console.WriteLine 的字符串(“Genuine Purity Fist”或“Backbiter's Billycock”)
  4. Console.ReadKey 的条件( num1 >= num2 AND userinput.Contains("pf")num1 >= num2 OR userinput.Contains("bb")

不知道为什么存在第四个差异,以及为什么情况如此奇怪地不同,但我想你知道。 无论如何,您可以创建一个将这些差异作为参数的函数,如下所示: DoWork(bool containsSpecific, string urlPathEnding, string itemTitle, bool useOrInsteadOfAnd) 只需调用此函数两次:

DoWork(userinput.Contains("pf"), "Purity%20Fist", "Genuine Purity Fist", false);
DoWork(userinput.Contains("bb"), "Backbiter%27s%20Billycock", "Backbiter's Billycock", true);

最后一个参数用在if (success == true)块的末尾(顺便说一句,你应该删除== true部分,因为它是多余的),但在if (num1 >= num2) .. else ..部分之外:

    if (success == true)
    {
        if (num1 >= num2)
           ...
        else
           ...

        if ((!useOrInsteadOfAnd && num1 >= num2 && containsSpecific) ||
           (useOrInsteadOfAnd && (num1 >= num2 || containsSpecific)))
        {
            Console.ReadKey();
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM