[英]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
語句之間有一些區別:
if
子句的字符串(“pf”或“bb”)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.