C Sharp上的标签空间

时间:2011-08-16 10:26:05

标签: c# .net string tabs

我创建了一个小程序来编写属性的XML-Comment(没有应用客户属性)。

    /// <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 个答案:

答案 0 :(得分:2)

String.Empty是“” 如果要检查字符串是“\ t”还是“”使用 string.IsNullOrEmpty和string.IsNullOrWhiteSpace方法

答案 1 :(得分:1)

如果您使用的是.NET 4.0,请查看String.IsNullOrWhiteSpace()

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

基本相同。 这应该告诉你为什么

if(s != " ") break;

无效。这是因为""不等于" " "\t"也是如此:它不等于" """


更新: 我想你正在尝试在每行的开头获取空格数,以便正确缩进自动生成的注释。 我可能会这样做:

编辑:删除了自己的代码。而是看看这里:

Get leading whitespace

答案 2 :(得分:0)

\ t用于标签空间。标签空间与空白区域不同。标签空间中将包含多个空白区域。

String.Empty和“”是相同的,除了在运行时解密1和在编译时解密。