C# 在数组上使用方法
我对C#非常陌生,试图制作一个计算数组的程序,但在使用数组的方法/属性(重置、打印计数器、增量)时遇到了问题。问题出现在for循环和以下循环中。如果有人能帮忙,请提前感谢C# 在数组上使用方法,c#,methods,C#,Methods,我对C#非常陌生,试图制作一个计算数组的程序,但在使用数组的方法/属性(重置、打印计数器、增量)时遇到了问题。问题出现在for循环和以下循环中。如果有人能帮忙,请提前感谢 using System; namespace CounterTest { public class MainClass { private static void PrintCounters(Counter[] counters) { foreach
using System;
namespace CounterTest
{
public class MainClass
{
private static void PrintCounters(Counter[] counters)
{
foreach (Counter c in counters)
{
string name = "";
int value = 0;
Console.WriteLine("{0} is {1}", name, value);
}
}
public static void Main(string[] args)
{
Counter[] myCounters = new Counter[3];
myCounters[0] = new Counter("Counter 1");
myCounters[1] = new Counter("Counter 2");
myCounters[2] = myCounters[0];
for (int i = 0; i < 4; i++)
{
Counter.Increment(myCounters[0]);
}
for (int i = 0; i < 9; i++)
{
Counter.Increment(myCounters[1]);
}
Counter.PrintCounters(myCounters);
Counter.Reset(myCounters[2]);
Counter.PrintCounters(myCounters);
}
}
}
您调用的方法不是静态方法,因此它们的调用方式如下:
for (int i = 0; i < 4; i++)
{
myCounters[0].Increment();
}
for (int i = 0; i < 9; i++)
{
myCounters[1].Increment();
}
MainClass.PrintCounters(myCounters); //this is static
myCounters[2].Reset();
MainClass.PrintCounters(myCounters);
for(int i=0;i<4;i++)
{
myCounters[0]。增量();
}
对于(int i=0;i<9;i++)
{
myCounters[1]。增量();
}
MainClass.打印计数器(myCounters)//这是静态的
myCounters[2]。重置();
MainClass.打印计数器(myCounters);
您使用计数器。增量(myCounters[0])
类似于增量是计数器上的一种扩展方法
public static class ExtentionCounter
{
public static void Increment(this Counter cnt)
{
cnt.Value++;
}
}
使用当前定义时,应使用:
myCounters[0].Increment();
Counter
是一种类型,而不是一个实例,这就是为什么Counter.Increment
是一个不正确的调用(Increment
不是一个静态
方法)
而不是
// Call static method of Counter class - Counter.Increment on instance of Counter
Counter.Increment(myCounters[1]);
等等。它可以是这样的:
public static void Main(string[] args)
{
Counter[] myCounters = new Counter[3]
myCounters[0] = new Counter("Counter 1");
myCounters[1] = new Counter("Counter 2");
myCounters[2] = myCounters[0];
for (int i = 0; i < 4; i++)
{
// call Increment on myCounters[0] instance
myCounters[0].Increment();
}
for (int i = 0; i < 9; i++)
{
// call Increment on myCounters[1] instance
myCounters[1].Increment();
}
// PrintCounters method call
PrintCounters(myCounters);
// call Reset on myCounters[2] instance
myCounters[2].Reset();
// PrintCounters method call
PrintCounters(myCounters);
}
for (int i = 0; i < 4; i++)
{
myCounters[0].Increment();
}
publicstaticvoidmain(字符串[]args)
{
计数器[]myCounters=新计数器[3]
myCounters[0]=新计数器(“计数器1”);
myCounters[1]=新计数器(“计数器2”);
myCounters[2]=myCounters[0];
对于(int i=0;i<4;i++)
{
//myCounters[0]实例上的调用增量
myCounters[0]。增量();
}
对于(int i=0;i<9;i++)
{
//myCounters[1]实例上的调用增量
myCounters[1]。增量();
}
//PrintCounters方法调用
打印计数器(myCounters);
//调用myCounters[2]实例上的重置
myCounters[2]。重置();
//PrintCounters方法调用
打印计数器(myCounters);
}
您正在调用计数器。递增
,然后提供一个计数器
作为参数。这段代码假定计数器
是一个带有静态方法的静态类,但事实并非如此
在for循环中,应使用如下代码:
public static void Main(string[] args)
{
Counter[] myCounters = new Counter[3]
myCounters[0] = new Counter("Counter 1");
myCounters[1] = new Counter("Counter 2");
myCounters[2] = myCounters[0];
for (int i = 0; i < 4; i++)
{
// call Increment on myCounters[0] instance
myCounters[0].Increment();
}
for (int i = 0; i < 9; i++)
{
// call Increment on myCounters[1] instance
myCounters[1].Increment();
}
// PrintCounters method call
PrintCounters(myCounters);
// call Reset on myCounters[2] instance
myCounters[2].Reset();
// PrintCounters method call
PrintCounters(myCounters);
}
for (int i = 0; i < 4; i++)
{
myCounters[0].Increment();
}
for(int i=0;i<4;i++)
{
myCounters[0]。增量();
}
以下是代码的解决方案。只需与您的进行比较,即可看到**的变化。
在打印计数器上,由于您将计数器循环为c,因此需要使用**c.name和c.Value调用计数器名称和值
using System;
using Test;
namespace teste
{
static class MainClass{
public static void PrintCounters(Counter[] counters)
{
foreach (Counter c in counters)
{
**string name = c.Name;**
**int value = c.Value;**
Console.WriteLine("{0} is {1}", name, value);
}
}
}
class Program
{
static void Main(string[] args)
{
Counter[] myCounters = new Counter[3];
myCounters[0] = new Counter("Counter 1");
myCounters[1] = new Counter("Counter 2");
myCounters[2] = myCounters[0];
for (int i = 0; i < 4; i++) {
**myCounters[0].Increment();**
}
for (int i = 0; i < 9; i++) {
**myCounters[1].Increment();**
}
**MainClass.PrintCounters(myCounters);**
**myCounters[2].Reset();**
**MainClass.PrintCounters(myCounters);**
}
}
}
我希望这有帮助你能描述一下你的问题吗?不要只是粘贴代码然后说“这是你的答案,看一看”。详细说明,解释你改变了什么以及为什么。你的权利我很抱歉,我是新来的,不管怎样我改变了,我希望这次我能更具体、更有用地解释。
using System;
using System.Collections.Generic;
using System.Text;
namespace Test
{
public class Counter
{
private int _count;
private string _name;
public Counter(string name)
{
**this._name = name;**
**this._count = 0;**
}
public void Increment()
{
**this._count++;**
}
public void Reset()
{
**this._count = 0;**
}
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
public int Value
{
get
{
return _count;
}
set
{
_count = value;
}
}
}
}