Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在数组上使用方法_C#_Methods - Fatal编程技术网

C# 在数组上使用方法

C# 在数组上使用方法,c#,methods,C#,Methods,我对C#非常陌生,试图制作一个计算数组的程序,但在使用数组的方法/属性(重置、打印计数器、增量)时遇到了问题。问题出现在for循环和以下循环中。如果有人能帮忙,请提前感谢 using System; namespace CounterTest { public class MainClass { private static void PrintCounters(Counter[] counters) { foreach

我对C#非常陌生,试图制作一个计算数组的程序,但在使用数组的方法/属性(重置、打印计数器、增量)时遇到了问题。问题出现在for循环和以下循环中。如果有人能帮忙,请提前感谢

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;
            }
        }
    }
}