class 中的属性无法保存,为什么
attribute in class can't be saved why
我正在尝试用 C# 编码,我有两个主要的 classes 第一个是路由器,这是它的实现
public class Router
{
public int RouterValue = 0;
}
我在另一个名为 Route 的 class 中使用了这个 class,其中包含路由器列表,这是实现:
public class Route
{
public List <Router> routers = new();
bool exitLoop = false;
public void ReadInput()
{
Router router = new();
Console.WriteLine(" \n Please enter data Input : \n ");
for (int i = 0; !exitLoop ; i++)
{
router.RouterValue = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("router value" , router.RouterValue);
routers.Add(router);
if (routers[i].RouterValue == 0)
{
exitLoop = true;
}
}
}
public void OutPut()
{
Console.WriteLine("out put : \n");
for (int i = 0; i < routers.Count; i++)
{
Console.WriteLine(routers[i].RouterValue);
}
}
public int count()
{
return routers.Count;
}
public int sum(List<Router> _routers)
{
int sum = 0;
for (int i = 0; i < routers.Count; i++)
sum += _routers[i].RouterValue;
return sum;
}
}
但是当我创建一个 Roue 对象并尝试输入值时,它会将它们打印为零并且总和也等于零,那么问题出在哪里?我调试了它并尝试放置 setter 和 getter 但所有这些都无济于事,有人对此有想法吗?
这是我主要 class 中添加值的部分 :
Routes.Add(op.CreatRoute());
Routes[^1].ReadInput();
Routes[^1].OutPut();
您只会创建一个 Router
对象:
Router router = new();
你所做的一切都只是更新那个对象。您输入(终止循环)的 上一个值 是 0
,因此一个 Router
对象曾经拥有的最后一个值是 0
。
(这是在调试器中逐步执行代码并观察变量的运行时值的好机会。您会发现 Route
对象上的 routers
字段始终具有恰好 一个 元素在其中,无论您重复该循环多少次。)
改为在循环内创建新的 Router
对象:
for (int i = 0; !exitLoop ; i++)
{
Router router = new(); // <--- here
router.RouterValue = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("router value" , router.RouterValue);
routers.Add(router);
if (routers[i].RouterValue == 0)
{
exitLoop = true;
}
}
这样,循环的每次迭代都会创建(并附加到列表)一个 Router
的全新实例,而不是总是在同一个实例上运行。
顺便说一句,这也是保持变量定义的好做法仅在您需要它们的范围内。这使得代码总体上更简单、更容易理解,并帮助您在应用程序复杂性增加时封装功能。
我正在尝试用 C# 编码,我有两个主要的 classes 第一个是路由器,这是它的实现
public class Router
{
public int RouterValue = 0;
}
我在另一个名为 Route 的 class 中使用了这个 class,其中包含路由器列表,这是实现:
public class Route
{
public List <Router> routers = new();
bool exitLoop = false;
public void ReadInput()
{
Router router = new();
Console.WriteLine(" \n Please enter data Input : \n ");
for (int i = 0; !exitLoop ; i++)
{
router.RouterValue = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("router value" , router.RouterValue);
routers.Add(router);
if (routers[i].RouterValue == 0)
{
exitLoop = true;
}
}
}
public void OutPut()
{
Console.WriteLine("out put : \n");
for (int i = 0; i < routers.Count; i++)
{
Console.WriteLine(routers[i].RouterValue);
}
}
public int count()
{
return routers.Count;
}
public int sum(List<Router> _routers)
{
int sum = 0;
for (int i = 0; i < routers.Count; i++)
sum += _routers[i].RouterValue;
return sum;
}
}
但是当我创建一个 Roue 对象并尝试输入值时,它会将它们打印为零并且总和也等于零,那么问题出在哪里?我调试了它并尝试放置 setter 和 getter 但所有这些都无济于事,有人对此有想法吗?
这是我主要 class 中添加值的部分 :
Routes.Add(op.CreatRoute());
Routes[^1].ReadInput();
Routes[^1].OutPut();
您只会创建一个 Router
对象:
Router router = new();
你所做的一切都只是更新那个对象。您输入(终止循环)的 上一个值 是 0
,因此一个 Router
对象曾经拥有的最后一个值是 0
。
(这是在调试器中逐步执行代码并观察变量的运行时值的好机会。您会发现 Route
对象上的 routers
字段始终具有恰好 一个 元素在其中,无论您重复该循环多少次。)
改为在循环内创建新的 Router
对象:
for (int i = 0; !exitLoop ; i++)
{
Router router = new(); // <--- here
router.RouterValue = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("router value" , router.RouterValue);
routers.Add(router);
if (routers[i].RouterValue == 0)
{
exitLoop = true;
}
}
这样,循环的每次迭代都会创建(并附加到列表)一个 Router
的全新实例,而不是总是在同一个实例上运行。
顺便说一句,这也是保持变量定义的好做法仅在您需要它们的范围内。这使得代码总体上更简单、更容易理解,并帮助您在应用程序复杂性增加时封装功能。