如何使用重复出现的代码使我的程序更有效
本文关键字:我的 程序 有效 代码 何使用 | 更新日期: 2023-09-27 18:23:49
这是我当前的代码,正如您所看到的,其中很大一部分是重复出现的代码,只需对其进行一些调整,例如输入、输出名称和链接。有没有什么方法可以把两个相似的代码块组合在一起,但仍然得到相同的结果。
我将在未来制作更多类似于纯洁之拳和反噬者的东西。
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")- URL的字符串(以"Purity%20Fist"或"Backbiter%27s%20Billycock"结尾)
- Console.WriteLine的字符串("真正的纯净之拳"或"Backbiter的Billycock")
- Console.ReadKey的条件(
num1 >= num2
ANDuserinput.Contains("pf")
ornum1 >= num2
oruserinput.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();
}
}