我创建了一个小程序来编写属性的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")
无效?
答案 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"
也是如此:它不等于" "
或""
更新: 我想你正在尝试在每行的开头获取空格数,以便正确缩进自动生成的注释。 我可能会这样做:
编辑:删除了自己的代码。而是看看这里:
答案 2 :(得分:0)
\ t用于标签空间。标签空间与空白区域不同。标签空间中将包含多个空白区域。
String.Empty和“”是相同的,除了在运行时解密1和在编译时解密。