[英]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.