<分区>
大家好,这是我关于 SO 的第一个问题,所以请放轻松。
我正在使用 Lambda/LINQ,同时为自己构建了一些实用方法。
第一种方法接受字符串,
"AdnanRazaBhatti"
然后把它分解成
"Adnan Raza Bhatti"
第二种方法像第一种方法一样接受字符串,也接受,
out String[] brokenResults
并像第一种方法一样返回损坏的字符串,并按如下方式填充 brokenResults 数组。
"Adnan" "Raza" "Bhatti"
问题:
一个。您能否建议如何使这些方法更有效?
B.当我尝试使用 StringBuilder 时,它告诉我扩展方法,例如,对于 StringBuilder 类,Select 不存在,为什么会这样?尽管索引器在 StringBuilder 上工作以获取像 StringBuilder s = new StrinBuilder("Dang"); 这样的字符字符 c = s[0];这里的 char 将是 D;
代码
方法一:
public static string SplitCapital( string source )
{
string result = "";
int i = 0;
//Separate all the Capital Letter
var charUpper = source.Where( x => char.IsUpper( x ) ).ToArray<char>( );
//If there is only one Capital letter then it is already atomic.
if ( charUpper.Count( ) > 1 ) {
var strLower = source.Split( charUpper );
foreach ( string s in strLower )
if ( i < strLower.Count( ) - 1 && !String.IsNullOrEmpty( s ) )
result += charUpper.ElementAt( i++ ) + s + " ";
return result;
}
return source;
}
方法二:
public static string SplitCapital( string source, out string[] brokenResults )
{
string result = "";
int i = 0;
var strUpper = source.Where( x => char.IsUpper( x ) ).ToArray<char>( );
if ( strUpper.Count( ) > 1 ) {
var strLower = source.Split( strUpper );
brokenResults = (
from s in strLower
where i < strLower.Count( ) - 1 && !String.IsNullOrEmpty( s )
select result = strUpper.ElementAt( i++ ) + s + " " ).ToArray( );
result = "";
foreach ( string s in brokenResults )
result += s;
return result;
}
else { brokenResults = new string[] { source }; }
return source;
}
注意事项:
我计划使用这些实用方法来分解从数据库中获取的表列名称。
例如,如果列名是“BooksId”,我将使用其中一种方法以编程方式将其分解为“Books Id”,我知道还有其他方法或重命名列名,例如在设计窗口或 [数据集] 中。[ tableName].HeadersRow.Cells[0].Text = "Books Id"但我也计划在未来的其他地方使用这种方法。
谢谢