无法在main中引用类

Chr*_*ege -1 c# program-entry-point class

前两个参数似乎工作,但当我添加字符串时,我得到一个错误(第17行不能将字符串转换为double).我在这里错过了什么?从我在书中看到的所有内容来看,这似乎应该有效,所以我猜这是一个愚蠢的错误,但我一直在寻找最近3个小时的代码并且没有找到任何东西.感谢您阅读这篇文章!

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication14
{
class Program
{
    static void Main(string[] args)
    {

        SimpleCalc Calc = new SimpleCalc("{0.0}", "{0.0}", "{0}");
        Console.WriteLine(Calc);

    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是班级

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication14
{
class SimpleCalc
{

        public SimpleCalc(double num1, double num2, string oper)
        {

            Console.Write("Enter first integer: ");
            num1 = Convert.ToDouble(Console.ReadLine());

            Console.Write("Enter operator (+,-,*, / or %)");
            oper = Convert.ToString(Console.ReadLine());

            Console.Write("Enter second integer: ");
            num2 = Convert.ToDouble(Console.ReadLine());

            if (oper == "+")
                Console.Write("Answer is: {0}", num1 + num2);

            if (oper == "-")
                Console.Write("Answer is: {0}", num1 - num2);

            if (oper == "*")
                Console.Write("Answer is: {0}", num1 * num2);

            if (oper == "/")
                Console.Write("Answer is: {0}", num1 / num2);

            if (oper == "%")
                Console.Write("Answer is: {0}", num1 % num2);

            Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 9

问题是你的构造函数需要两个双精度数和一个字符串:

public SimpleCalc(double num1, double num2, string oper)
Run Code Online (Sandbox Code Playgroud)

但是你用三个字符串来调用它:

SimpleCalc Calc = new SimpleCalc("{0.0}", "{0.0}", "{0}");
Run Code Online (Sandbox Code Playgroud)

改为:

SimpleCalc calc = new SimpleCalc(0.0, 0.0, "{0}");
Run Code Online (Sandbox Code Playgroud)

在编译方面应该没问题.(在构造函数中与用户交互并忽略传入的参数值并不好,但这是另一回事.)

另请注意,我已将局部变量的名称从Calc更改calc为遵循正常的C#约定.

  • @JonSkeet你从`Calc`改为`calc` :) (4认同)