关于方法的建议?

时间:2014-01-19 21:47:15

标签: c# string

我刚开始用C#编程,所以我是初学者,我一直在练习一些代码,我希望你对某些事情有所了解。

我有飞机的飞行方向,例如''伦敦 - 柏林''(方向)。我想创建一个方法,它将返回飞机起点(伦敦)的第一个和最后一个辅音,以及飞机目的地(柏林)的第一个和最后一个辅音。我写过这个,所以我想知道它是否正常,或者你是否有一些建议:

public class Flight
{
    private string direction;

    public Flight(string direction)
    {
        this.direction = direction;
    }

    public string Consonants()
    {
        string starting = direction.Split('-')[0];
        string destination = direction.Split('-')[1];

        string startConsonants = starting.ToUpper().Replace("A", "").Replace("E", "").Replace("I", "").Replace("O", "").Replace("U", "");
        string destConsonants = destination.ToUpper().Replace("A", "").Replace("E", "").Replace("I", "").Replace("O", "").Replace("U", "");

        return string.Format("{0}{1}-{2}{3}", startConsonants[0].ToString(), startConsonants[startConsonants.Length-1].ToString(), destConsonants[0].ToString(), destConsonants[destConsonants.Length-1].ToString());
    }
}

2 个答案:

答案 0 :(得分:0)

如果您不介意大写/小写区分,那么您可以使用Linq提取所需的信息

public string Consonants()
{
    string starting = direction.Split('-')[0];
    string destination = direction.Split('-')[1];

    char[] cs = new char[] {'B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','W','X','Z'};
    string startFirst = starting.ToUpper().ToCharArray().First(x => cs.Contains(x)).ToString();
    string startLast = starting.ToUpper().ToCharArray().Last(x => cs.Contains(x)).ToString();
    string destFirst = destination.ToUpper().ToCharArray().First(x => cs.Contains(x)).ToString();
    string destLast = destination.ToUpper().ToCharArray().Last(x => cs.Contains(x)).ToString();
    return string.Format("{0}{1}-{2}{3}", startFirst, startLast, destFirst, destLast);
}

答案 1 :(得分:0)

以下是一些建议:

1 - 第一点是合乎逻辑的。如果您传递字符串“London-Lebanon”,则输出为LN-LN,我认为它无效。使用您的版本,如果您通过“伦敦 - 阿联酋”,您也可能会收到错误。

2 - 您的构造函数需要参数但不清楚原因。我建议你将参数传递给使用它的方法,并在处理之前检查参数是否有效,如下所示。

3 - 无缘无故地重复拆分两次。

4 - 即使在字符串参数上,也会多次重复ToString()。

5 - 您可以定义一个私有方法来进行格式化。如果您更改规则,这可以防止错误。

这是我的版本,包含以上几点(第一点除外):

 class Flight
    {

        public string Consonants(string direction)
        {
            string[] words = direction.Split('-');
            // check if the separator is missing
            if (words.Length!=2) return string.Empty; //missing separator error

            return string.Format("{0}-{1}", Replacer(words[0]),  Replacer(words[1]));
        }
        private string Replacer(string arg)
        { 
            string abr= arg.ToUpper().Replace("A", string.Empty).Replace("E", string.Empty).Replace("I", string.Empty).Replace("O", string.Empty).Replace("U", string.Empty);
            if (abr.Length < 2)
                throw new Exception(string.Format("processing error in Replacer input {0} outpur {1}", arg, abr)); // example if you pass: UAE

            return string.Format("{0}{1}", abr[0], abr[abr.Length - 1] );
        }

    }