Пробел на C Sharp - PullRequest
       36

Пробел на C Sharp

0 голосов
/ 16 августа 2011

Я создал небольшую программу для написания XML-комментария для свойств (к которому не применяются атрибуты клиента).

    /// <summary>
    /// Write XML-Comment for Properties(which dont have customer attributes applied).
    /// </summary>
    /// <param name="fileName">'*.cs' file along with full path to comment.</param>
    /// <returns></returns>
    static bool WriteComment(string fileName)
    {
        List<string> code = new List<string>();

        using (StreamReader sr = new StreamReader(fileName))
        {

            while (!sr.EndOfStream)
            {
                code.Add(sr.ReadLine());
            }

            List<int> indexes = (from line in code
                                 where line.Contains("get")
                                 select code.IndexOf(line)).ToList();

            int count = 0;
            foreach (int i in indexes)
            {
                code.Insert((i + count++) - 2, getWhiteSpace(code[(i + count) - 3]) + "/// <summary>");
                code.Insert((i + count++) - 2, getWhiteSpace(code[(i + count) - 3]) + "/// Gets or Sets the " + getPropertyName(code[(i + count) - 3]));
                code.Insert((i + count++) - 2, getWhiteSpace(code[(i + count) - 3]) + "/// </summary>");
            }
        }

#if DEBUG
        foreach (string line in code)
            Console.WriteLine(line);
#else
        using (StreamWriter sw = new StreamWriter(fileName))
        {
            foreach (string line in code)
                sw.WriteLine(line);
        }
#endif

        return true;
    }

    /// <summary>
    /// To retrive property name.
    /// </summary>
    /// <param name="property">Property Name Line(line with visibiliy mode and return type ).</param>
    /// <returns>Property Name.</returns>
    public static string getPropertyName(string property)
    {
        return Regex.Replace(property.Substring(property.LastIndexOf(" ")), "([a-z])([A-Z])", "$1 $2").TrimStart();
    }

    /// <summary>
    /// Get initial position of the property. So that XML-comment can be placed properly 
    /// at the top.
    /// </summary>
    /// <param name="codeLine">Property Line code.</param>
    /// <returns>Number of White Space.</returns>
    public static string getWhiteSpace(string codeLine)
    {
        string retStr = "";
        foreach (string s in codeLine.Split())
        {
            if (s != string.Empty) break;
            retStr += " ";
        }
        return retStr;
    }

Как видно из метода getWhiteSpace Я проверяю Empty String и это хорошо работает.Но, если я применю string.Empty к retStr в цикле ... возвращаемое значение будет string.Empty только!Это я могу понять, что объединение string.Empty приведет только к string.Empty.

Теперь у меня вопрос, как if (s != string.Empty) работает и почему if (s != " ") или if (s != "\t") не работает?

Ответы [ 3 ]

2 голосов
/ 16 августа 2011

String.Empty is "" Если вы хотите проверить, является ли string "\ t" или "", используйте string.IsNullOrEmpty и string.IsNullOrWhiteSpace методы

1 голос
/ 16 августа 2011

Если вы используете .NET 4.0, взгляните на String.IsNullOrWhiteSpace ()

if(s != string.Empty) break;
if(s != "") break;

, по сути, то же самое.это должно сказать вам, почему

if(s != " ") break;

не работает.Это потому, что "" не равно " ".
, то же самое верно для "\t": оно не равно " " или ""


Обновление:Я полагаю, что вы пытаетесь получить количество пробелов в начале каждой строки, чтобы правильно сделать отступ для автоматически сгенерированных комментариев.Я бы, наверное, сделал это следующим образом:

EDIT: удалил собственный код.Вместо этого посмотрите здесь:

Получите начальные пробелы

0 голосов
/ 16 августа 2011

\ t для пробела.Пространство вкладок отличается от пустого пространства.В пространстве табуляции будет более 1 пустого места.

String.Empty и "" одинаковы, за исключением того, что 1 дешифрует во время выполнения, а другой - во время компиляции.

...