簡體   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