为什么我会得到一个“;序列不包含任何元素“;错误
本文关键字:元素 错误 包含任 何元素 一个 为什么 | 更新日期: 2023-09-27 18:00:42
我使用以下方法将字符串的第一个字符转换为大写,并在末尾添加一个句点:
public static string toUpper (string mytext)
{
if (string.IsNullOrEmpty(mytext) || mytext == "") return mytext;
mytext = mytext.Trim();
if (mytext.EndsWith("."))
{
mytext = mytext.First().ToString(CultureInfo.InvariantCulture).ToUpper()
+ string.Join("", mytext.Skip(1))
;
}
else
{
mytext = mytext.First().ToString(CultureInfo.InvariantCulture).ToUpper()
+ string.Join("", mytext.Skip(1))
+ "."
;
}
return mytext;
}
我得到一个错误序列不包含任何元素,如果mytext="在这一行:
mytext = mytext.First().ToString(CultureInfo.InvariantCulture).ToUpper()
+ string.Join("", mytext.Skip(1))
+ "."
;
非常感谢您的建议。
在Trim()方法之后,您可能会得到一个空字符串,这将在您尝试获取第一个(不存在的)字符时导致异常。
看起来比任何权利都要复杂得多。
我会追求优雅,并使用一个正则表达式:
public static string toUpper( string s )
{
string value = null ;
if ( s != null )
{
// match length 1: it's the first first character: upper-case it
// match length 0: the last character isn't a period. append it
value = rx.Replace( s.Trim() , m => m.Length == 1 ? m.Value.ToUpper( CultureInfo.InvariantCulture ) : "." ) ;
}
return value ;
}
static readonly Regex rx = new Regex( @"(^.)|($(?<=[^'.]" ) ;
但是你可以使用字符串生成器。。。
public static string toUpper( string s )
{
if ( s == null ) return null ;
StringBuilder sb = new StringBuilder( s.Trim() ) ;
if ( sb.Length > 0 )
{
sb[0] = char.ToUpper(sb[0] , CultureInfo.InvariantCulture ) ;
if ( sb[ sb.Length-1] != '.' ) sb.Append('.') ;
}
value = sb.ToString() ;
return value ;
}
您应该在检查mytext之前对其进行修剪。此外,IsNullOrEmpty也可以用于"standalone"。所以试试:
mytext = mytext.Trim();
if (string.IsNullOrEmpty(mytext)) return mytext;
此外,如果mytext的长度为1个字符,则Skip(1)将失败。
您的代码有错误。我按照的方式修改了它
public static string toUpper(string mytext)
{
if (String.IsNullOrWhiteSpace(mytext)) { return mytext; }
mytext = mytext.Trim();
if (mytext.EndsWith("."))
{
if (mytext.Length == 1)
{
return mytext;
}
else
{
string first = mytext.First();
mytext = String.Join(first.ToUpper(), mytext.Substring(1));
}
}
else
{
if (mytext.Length == 1)
{
mytext = String.Join(mytext.ToUpper, ".");
}
else
{
string first = mytext.First();
mytext = String.Join(first.ToUpper(), mytext.Substring(1));
}
}
return mytext;
}
使用firstorddefault()而不是first()。在没有元素的情况下首先抛出异常