C# 在其他课程的计算后,在静态Main中获得答案

C# 在其他课程的计算后,在静态Main中获得答案,c#,class,C#,Class,我需要在静态Main中显示sum,但要在其他类中进行计算。我一直得0分。为什么? namespace ConsoleApp7{ public class Perimetro_skaiciavimas { public static void Main() { { var kvadrato_perimetro_skaiciavimas = new kvadrato_perimetro_ska

我需要在静态Main中显示sum,但要在其他类中进行计算。我一直得0分。为什么?

namespace ConsoleApp7{

    public class Perimetro_skaiciavimas
    {

        public static void Main()
        {
            {
                var kvadrato_perimetro_skaiciavimas = new kvadrato_perimetro_skaiciavimas();

                Console.WriteLine("Ivesti kvadrato krastiniu ilgius");
                Console.Write("Krastine A: ");
                kvadrato_perimetro_skaiciavimas.a = int.Parse(Console.ReadLine());
                Console.Write("Krastine B: ");
                kvadrato_perimetro_skaiciavimas.b = int.Parse(Console.ReadLine());

                Console.WriteLine(kvadrato_perimetro_skaiciavimas.perimetras); // GIVES ME A 0 how to get SUM?
            }
        }
    }
    public class kvadrato_perimetro_skaiciavimas
    {
        public static int a, b, perimetras;

        public void skaiciavimas() {
            perimetras = a + b;     //PROBLEM AREA
        }
    } }

在另一个类中,您已经将变量定义为static,这意味着该值是在对象完全构造之前定义的。您的其他类应如下所示:

public class Calculator
{
     public float Sum(params float[] parameters) => result = parameters.Where(parameter => parameter != null).Sum(parameter => parameter);
}
从您的入口点,您可以知道读取所有输入,然后将它们传递到
计算器.Sum
以通过执行
new Calculator().Sum(1,2,3,4,5,6,7,8,9)为您计算例如。如果愿意,您可以避免Linq并手动迭代和求和,但这取决于您自己

您当前的代码失败,因为:

  • 不正确地使用static(分配了零,因为这是默认值,并且在构造之前初始化)
  • 应该使用
    TryParse
    而不是
    Parse
    来清理用户输入,因为如果失败,它将抛出异常
  • 您也不调用sum方法

    • 下面是您修改的代码。问题是您没有调用方法skaiciavimas()

      您的类命名约定不符合C#标准。另外,如果您的方法名称更像动词(CalculatePerimtras)等,那就太好了

      解析用户输入可以像TryParse或try-catch一样完成,也建议使用异常。最后,使用这样的变量完全违反了OOP原则

      public class Perimetro_skaiciavimas
      {
          public static void Main()
          {
              {
                  var kvadrato_perimetro_skaiciavimas = new kvadrato_perimetro_skaiciavimas();
      
                  Console.WriteLine("Ivesti kvadrato krastiniu ilgius");
                  Console.Write("Krastine A: ");
                  kvadrato_perimetro_skaiciavimas.a = int.Parse(Console.ReadLine());
                  Console.Write("Krastine B: ");
                  kvadrato_perimetro_skaiciavimas.b = int.Parse(Console.ReadLine());
                  kvadrato_perimetro_skaiciavimas.skaiciavimas();
                  Console.WriteLine(kvadrato_perimetro_skaiciavimas.perimetras); 
              }
          }
      }
      public class kvadrato_perimetro_skaiciavimas
      {
          public static int a, b, perimetras;
      
          public void skaiciavimas() {
              perimetras = a + b;     //PROBLEM AREA
          }
       } 
      }
      

      公共静态int a、b、周长中删除
      静态
      kvadrato\u perimetro\u skaiciavimas的字段修改实例名称与类名不一样我也不会有静态字段。谢谢。一个明显的例子帮了大忙:)