我在两个地方有相同的代码:
if (amountUnit.ToLower().Contains("x"))
{
string[] amount = amountUnit.Split('x');
x = amount[0].Trim();
y = amount[1].Trim();
}
else
{
x = "1";
y = amountUnit.Trim();
}
//
unit = textInBrackets.Replace(amountUnit, "");
name = "";
for (int z = 0; z < i; z++)
{
name += someArray[z];
name += " ";
}
name = name.Trim();
确切的代码重复两次。怎么解决?如果我用一种新方法提取它,我会有很多ref输入参数。还有另外一种方法吗? 如果不可能,只是部分直到评论?
答案 0 :(得分:0)
代码似乎在逻辑上有两个独立的块。
一个处理x
和y
- 另一个处理name
。这些应该是单独的方法。
现在,您可以创建一个封装x
和y
的类型(类或结构),这意味着您只需要传入一个参数。您可以通过返回而不是通过ref
传递它,而是在调用者中替换您传入的内容。
答案 1 :(得分:0)
将您的代码和数据合并到一个类中; - )
public class Point
{
public Point(string amountUnit)
{
if (amountUnit == null)
{
throw new ArgumentNullException("amountUnit");
}
if (amountUnit.ToLower().Contains("x"))
{
string[] amount = amountUnit.Split('x');
this.X = amount[0].Trim();
this.Y = amount[1].Trim();
}
else
{
this.X = "1";
this.Y = amountUnit.Trim();
}
}
string X { get; private set; }
string Y { get; private set; }
}
答案 2 :(得分:0)
像:
public struct Parameters
{
public int X {get; set;}
public int Y {get; set;}
}
public Parameters ExtractParameters(string amountUnit)
{
var parameters = new Parameters();
if (amountUnit.ToLower().Contains("x"))
{
string[] amount = amountUnit.Split('x');
parameters.X = int.Parse(amount[0].Trim());
parameters.Y = int.Parse(amount[1].Trim());
}
else
{
parameters.X = 1;
parameters.Y = int.Parse(amountUnit.Trim());
}
return parameters;
}
用法:
var parameters = ExtractParameters(amountUnit);
var x = parameters.X;
var y = parameters.Y;
您还可以将其作为字符串的扩展方法。 当然,您最好也添加一些异常处理。
答案 3 :(得分:0)
如果你不需要任何非常动态的东西,如何将它分成两个方法,并做一些简单的事情:
public static string GetX(string amountUnit)
{
return amountUnit.ToLower().Contains("x") ?
amountUnit.Split('x')[0].Trim() :
"1";
}
public static string GetY(string amountUnit)
{
return amountUnit.ToLower().Contains("x") ?
amountUnit.Split('x')[1].Trim() :
amountUnit.Trim();
}