C# 4.0 将字符串限制为八个字符,并返回带星号的字符串
我有一个学生要去。我想确定号码 LastName的字符数。如果字符数大于 如果大于8,则返回8个字符的姓氏,其中包含两个星号 剪掉其他角色 e、 阿布马德姆酒店** 这是我如何开始的。我无法让它工作。你能帮忙吗C# 4.0 将字符串限制为八个字符,并返回带星号的字符串,c#-4.0,C# 4.0,我有一个学生要去。我想确定号码 LastName的字符数。如果字符数大于 如果大于8,则返回8个字符的姓氏,其中包含两个星号 剪掉其他角色 e、 阿布马德姆酒店** 这是我如何开始的。我无法让它工作。你能帮忙吗 public class StudentDto { public string Firstname { get; set; } public string EmailAddress { get; set; } public string LastName
public class StudentDto
{
public string Firstname { get; set; }
public string EmailAddress { get; set; }
public string LastName
{
get
{
var checkLength = LastName.Length;
string First8Chars = string.Empty;
int count=0;
List<char> storeStrings = new List<char>();
if (checkLength > 8)
{
foreach (var c in LastName)
{
storeStrings.Add(c);
if ()
{
}
count++;
}
}
}
}
}
如果由于某种原因无法使用库函数:
private string _lastName = "";
public string LastName
{
get
{
var checkLength = _lastName.Length;
string First8Chars = string.Empty;
string storeStrings = "";
if (checkLength > 8)
{
foreach (var c in _lastName)
{
storeStrings += c;
if (storeStrings.Length == 8)
{
storeStrings += "**";
return storeStrings;
}
}
}
return storeStrings;
}
set { _lastName = value; }
}
我注意到的一件事是,在LastName属性getter中使用LastName,这是一个很大的no-no,它会导致递归,并且可能会出现堆栈溢出异常
这可以写得更简洁,但我将把它作为一个练习留给你就这样做吧:
string _backingFieldLastName;
public string LastName
{
get
{
return _backingFieldLastName == null || backingFieldLastName.Length <=8 ?
_backingFieldLastName :
_backingFieldLastName.Substring(0,8) +"**"; // second parameter of substring is count of chars from the start index (first parameter)
}
set
{
_backingFieldLastName = value;
}
}
string\u backingFieldLastName;
公共字符串姓氏
{
得到
{
return _backingFieldLastName==null | | backingFieldLastName.LengthLinq方式:
var lastname = "Abumademal";
var formatted = (new string(lastname.Take(8).ToArray())).PadRight(lastname.Length, '*');
// will yield "Abumadem**"
获取8个字符并从此数组中创建一个新字符串,然后根据需要用*填充它
全面实施:
private string lastname;
public string LastName
{
get
{
if (null == this.lastname)
{
return null;
}
char[] firsteight = this.lastname.Take(8).ToArray();
string tmp = new string(firsteight);
// padding this way wasn't the actual requirement ...
string result = tmp.PadRight(this.lastname.Length, '*');
return result;
}
set
{
this.lastname = value;
}
}
您可能希望查看String.Substring
让库为您做更多的工作。String类有很好的方法来查找索引或获取子字符串。类似于LastName.Length>8:LastName.Substring(0,7)+“**”:LastName调用“var checkLength=LastName.Length;”时,您似乎还有一个循环。它将执行与当前相同的LastName获取。一次又一次。这是一个不能使用字符串类方法的家庭作业吗?请给我看一些示例代码好吗?我对库函数没问题。那很好。我该怎么做?谢谢Steve。把它放在哪里而不是放在gette中r、 也许我可以在存储过程级别执行此操作,因为我正在使用一个。我的意思是,您正在从LastName属性中访问LastName属性,该属性是递归的,会导致堆栈溢出。这就是为什么我通过添加字符串_LastName并使用该字符串将其更改为backed属性。使用更短的下面的示例比我发布的示例要好,我发布的示例假设您不能使用库函数。
private string lastname;
public string LastName
{
get
{
if (null == this.lastname)
{
return null;
}
char[] firsteight = this.lastname.Take(8).ToArray();
string tmp = new string(firsteight);
// padding this way wasn't the actual requirement ...
string result = tmp.PadRight(this.lastname.Length, '*');
return result;
}
set
{
this.lastname = value;
}
}