C#使用getter时的StackOverflowException
我有一个getter,它将字符串的第一个字母改为大写。但我得到了StackOverflowExceptionC#使用getter时的StackOverflowException,c#,getter,C#,Getter,我有一个getter,它将字符串的第一个字母改为大写。但我得到了StackOverflowException namespace ConsoleApplication1 { class Program { class Human { public String Name { get {
namespace ConsoleApplication1
{
class Program
{
class Human
{
public String Name
{
get
{
char[] letters = Name.ToCharArray();
// upper case the first char
letters[0] = char.ToUpper(letters[0]);
// return the array made of the new char array
return new String(letters);
//return Name.First().ToString().ToUpper() + String.Join("", Name.Skip(1));
}
set
{
}
}
我做错了什么?这一行
char[]letters=Name.tocharray()
递归调用属性公共字符串名
,这是因为您正在访问getter中的getter
您应该创建一个支持变量并访问该变量,而不是名称:
class Human
{
private string _name = string.Empty;
public String Name
{
get
{
char[] letters = _name.ToCharArray(); // use the backing variable instead of Name
// upper case the first char
letters[0] = char.ToUpper(letters[0]);
// return the array made of the new char array
return new String(letters);
//return Name.First().ToString().ToUpper() + String.Join("", Name.Skip(1));
return new String(;// ToUpperFirstLetter(this.Imie);
}
set
{
_name = value;
}
}
您的属性
Name
正在第char[]letters=Name.tocharray()行中调用自身代码>。您必须使用字段而不是属性:
class Human
{
private string _name;
public String Name
{
get
{
if (_name == null)
return null;
if (_name.Length <= 1)
return _name.ToUpper() + _name.Substring(1);
return _name.Substring(0, 1).ToUpper() + _name.Substring(1);
}
set
{
_name = value;
}
}
}
这:
当您试图从Name
读取某些内容时,您使用的是getter。因此,您造成了一个无限循环。这里有一个工作名称方法,当您获得值时,它会使句子的第一个字母大写
private string _name;
public string Name
{
get
{
if (string.IsNullOrEmpty(_name))
{
return _name;
}
var charArray = _name.ToCharArray();
charArray[0] = char.ToUpper(charArray[0]);
return new string(charArray);
}
set { _name = value; }
}
亲爱的上帝,我从哪里开始呢?给这个男孩一个机会,他可能是一个初学者,正在努力完成他的第一行代码。首先,你的示例代码无法编译。2个返回语句和一个开括号。其次,getter递归地引用自身。您需要设置一个私有字符串#名称并对其进行计算。是的,这是我在C#中的第一行代码。无论如何,哗众取宠的革命p将您的_name字段移出属性,我将对其进行更新投票。:)@哈哈哈,这是一个又好又愚蠢的错误!谢谢!:)
char[] letters = Name.ToCharArray();
private string _name;
public string Name
{
get
{
if (string.IsNullOrEmpty(_name))
{
return _name;
}
var charArray = _name.ToCharArray();
charArray[0] = char.ToUpper(charArray[0]);
return new string(charArray);
}
set { _name = value; }
}