0

我在两个地方有相同的代码:

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 输入参数。还有其他方法吗?如果不可能,只是评论之前的部分?

4

4 回答 4

0

从逻辑上讲,代码似乎有两个独立的块。

一个处理xy- 另一个处理name. 这些可能应该是单独的方法。

现在,您可以创建一个封装xand的类型(类或结构) y,这意味着您只需要传入一个参数。ref您可以简单地返回它并在调用者中替换您传入的内容,而不是通过它传递它。

于 2013-04-08T11:49:11.003 回答
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; }
}
于 2013-04-08T12:00:07.730 回答
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; 

您还可以使其成为字符串的扩展方法。当然,您最好也添加一些异常处理。

于 2013-04-08T12:05:16.743 回答
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();
}
于 2013-04-08T12:08:25.067 回答