该名称在当前上下文中不存在

时间:2012-11-15 15:04:08

标签: c#

我收到了两个文件:Sumator.cs和Kalkulator.cs @ Visual Studio 2012

我认为你不需要看到这两个,但我确实把它们放在了这里,下到页面检查我的问题。

Sumator.cs 代码:

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

namespace Sumator2
{
class Sumator
{
    bool Status = false;
    double Suma = 0;
    public Kalkulator Kalk = new Kalkulator();
    public Sumator()
    {
    }

    public void ZmienStatus()
    {
        Status = !Status;
    }
    public string PokazStatus()
    {

        if (Status == true)
            return " Sumator włączony";
        else
            return " Sumator wyłaczony";

    }

    public void PokazWynikS()
    {
        if (Status == true)
            Suma += Kalk.Wynik;
        Console.WriteLine("Wynik działania : " + Kalk.L1.ToString() + " " + Kalk.Dzialanie.ToString() + " " + Kalk.L2.ToString() + " = " + Kalk.Wynik.ToString() + PokazStatus() + "   Suma= " + Suma.ToString());
    }

    public void Zeruj()
    {
        Suma = 0;
    }
}
}

Kalkulator.cs 代码:

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

namespace Sumator2
{
class Kalkulator
{
    public double L1;
    public double L2;
    public double Wynik;
    public String Dzialanie = "";
    public Kalkulator()
    {
    }
      void Oblicz()
    {
        switch (Dzialanie)
        {
            case "+":
                Wynik = L1 + L2;
                break;
            case "-":
                Wynik = L1 - L2;
                break;
            case "*":
                Wynik = L1 * L2;
                break;
            case "/":
                Wynik = L1 / L2;
                break;

        }
    }
    public void PodajDzialanie(double licz1, double licz2, string dz)
    {
        L1 = licz1;
        L2 = licz2;
        Dzialanie = dz;
        Oblicz();

    }
    public void PokazWynik()
    {
        Console.WriteLine("Wynik działania : " + L1.ToString() + " " + Dzialanie.ToString() + " " + L2.ToString() + " = " + Wynik.ToString());
    }

}
}

我已经为这两个人编写了我的主要代码。 Program.cs 代码:

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

namespace Sumator2
{
class Program
{
    static void Main(string[] args)
    {
        Sumator s1 = new Sumator();

        s1.ZmienStatus();

        bool userNum = true;
        while (userNum)
        {
            double userDouble;
            string userString = Console.ReadLine();

            if (userNum = double.TryParse(userString, out userDouble))
            {
                userDouble = Convert.ToDouble(userString);
                userNum = false;
            }
            else 
            {
                Console.WriteLine("Nie podano liczby!");
                userNum = true;
            }
        }


        s1.Kalk.PodajDzialanie(userDouble, 2, "*");
        s1.PokazWynikS();
        s1.Kalk.PokazWynik();

        s1.Kalk.PodajDzialanie(userDouble, 2, "+");
        s1.PokazWynikS();
        s1.Kalk.PokazWynik();


        Console.ReadKey();
    }
}
}

问题是我想在这些参数中使用s1.Kalk.PodajDzialanie()函数:

 s1.Kalk.PodajDzialanie(userDouble, 2, "*");

我得到的错误如下:

 The name 'userDouble' does not exists in the current context

我的意思是wt *?如果我愿意,这个功能可以正常工作:

 s1.Kalk.PodajDzialanie(2, 2, "*");

4 个答案:

答案 0 :(得分:10)

您在userDouble循环中声明while。一旦你离开那个循环,它就超出了范围。将它移到循环之前,你应该没问题。所以相反,你有:

bool userNum = true;
double userDouble;
while (userNum)
{      
    string userString = Console.ReadLine();

    // Jesli sa liczby to convertujemy
    if (userNum = double.TryParse(userString, out userDouble))
    {
        userDouble = Convert.ToDouble(userString);
        userNum = false;
    }
    else 
    {
        Console.WriteLine("Nie podano liczby!");
        userNum = true;
    }
}

答案 1 :(得分:2)

您在函数无权访问的范围内声明userDouble。

将您的代码更改为:

static void Main(string[] args)
    {
        Sumator s1 = new Sumator();
        double userDouble; //moved declaration out of while loop

        s1.ZmienStatus();

        // Sprawdzanie czy w stringu sa liczby
        bool userNum = true;
        while (userNum)
        {

            string userString = Console.ReadLine();

            // Jesli sa liczby to convertujemy
            if (userNum = double.TryParse(userString, out userDouble))
            {
                userDouble = Convert.ToDouble(userString);
                userNum = false;
            }
            else 
            {
                Console.WriteLine("Nie podano liczby!");
                userNum = true;
            }
        }


        s1.Kalk.PodajDzialanie(userDouble, 2, "*");
        s1.PokazWynikS();
        s1.Kalk.PokazWynik();

        s1.Kalk.PodajDzialanie(userDouble, 2, "+");
        s1.PokazWynikS();
        s1.Kalk.PokazWynik();


        Console.ReadKey();
    }

答案 2 :(得分:2)

你的变量double userDouble;在while循环中声明,你需要将它移到外面。或者你的s1.Kalk.PodajDzialanie(userDouble,2,“*”);在它结束之前的while循环内部。

答案 3 :(得分:2)

您的变量userDouble在块内声明,您尝试进行的调用在该块之外;因此,变量超出范围,因此在调用的上下文中不存在。

{
   declaration;
   work;
}

call; // doesn't work

但是这个 工作:

declaration;
{
    work;
}

call; // OK