Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.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# - Fatal编程技术网

C# 我无法访问类外的变量

C# 我无法访问类外的变量,c#,C#,我正在做一个21点项目 我首先为Hit按钮创建了Hit类 因此,在表单上,当我单击它时,它将从switch case场景中检索一个值,该场景在hit类中随机化了一个数字/值 我尝试在GenerateID方法中的hit to=stRefID类下面创建一个变量,但也失败了;一切都是公开的,所以我很困惑 感谢您抽出时间来帮助我,因为这是我第一次在这里发帖,但我一直都在使用这个地方 Hit.cs: using System; using System.Collections.Generic; using

我正在做一个21点项目

我首先为
Hit
按钮创建了
Hit

因此,在表单上,当我单击它时,它将从switch case场景中检索一个值,该场景在hit类中随机化了一个数字/值

我尝试在
GenerateID
方法中的hit to=stRefID类下面创建一个变量,但也失败了;一切都是公开的,所以我很困惑

感谢您抽出时间来帮助我,因为这是我第一次在这里发帖,但我一直都在使用这个地方

Hit.cs:

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

namespace Blackjack
{
public class Hit
{
    public static string GenerateID(int MinSize, int MaxSize)
    {

        string stRefID = "";

        Random random = new Random();

            int iChosenMaxSize = random.Next(0, 11);

            int two = 2;
            int three = 3;
            int four = 4;
            int five = 5;
            int six = 6;
            int seven = 7;
            int eight = 8;
            int nine = 9;
            int ten = 10;
            int jack = 10;
            int queen = 10;
            int king = 10;
            int ace = 11;


         for (int x = 1; x <= iChosenMaxSize; x++)
        {
            int iCharType = random.Next(0, 12);
            switch (iCharType)
            {
                    case 0:
                        stRefID += two;
                        break;
                    case 1:
                        stRefID += three;
                        break;
                    case 2:
                        stRefID += four;
                        break;
                    case 3:
                        stRefID += five;
                        break;
                    case 4:
                        stRefID += six;
                        break;
                    case 5:
                        stRefID += seven;
                        break;
                    case 6:
                        stRefID += eight;
                        break;
                    case 7:
                        stRefID += nine;
                        break;
                    case 8:
                        stRefID += ten;
                        break;
                    case 9:
                        stRefID += ace;
                        break;
                    case 10:
                        stRefID += jack;
                        break;
                    case 11:
                        stRefID += queen;
                        break;
                    case 12:
                        stRefID += king;
                        break;

                }
             } return stRefID; 

        }
    }
}
我也尝试过将按钮公开,但失败了

输出的测试文本框:

private void test_TextChanged(object sender, EventArgs e)
    {

    }
亲切问候,, 迈克

修订守则:

namespace Blackjack
{
public class Hit
{

    public static string GenerateID(string stRefID)

    {

        Random random = new Random();

            int iChosenMaxSize = random.Next(0, 11);

            int two = 2;
            int three = 3;
            int four = 4;
            int five = 5;
            int six = 6;
            int seven = 7;
            int eight = 8;
            int nine = 9;
            int ten = 10;
            int jack = 10;
            int queen = 10;
            int king = 10;
            int ace = 11;


         for (int x = 1; x <= iChosenMaxSize; x++)
        {
            int iCharType = random.Next(0, 12);
            switch (iCharType)
            {
                    case 0:
                        stRefID += two;
                        break;
                    case 1:
                        stRefID += three;
                        break;
                    case 2:
                        stRefID += four;
                        break;
                    case 3:
                        stRefID += five;
                        break;
                    case 4:
                        stRefID += six;
                        break;
                    case 5:
                        stRefID += seven;
                        break;
                    case 6:
                        stRefID += eight;
                        break;
                    case 7:
                        stRefID += nine;
                        break;
                    case 8:
                        stRefID += ten;
                        break;
                    case 9:
                        stRefID += ace;
                        break;
                    case 10:
                        stRefID += jack;
                        break;
                    case 11:
                        stRefID += queen;
                        break;
                    case 12:
                        stRefID += king;
                        break;

                }
          } return stRefID; 

        }

}
}
名称空间21点
{
公课热门
{
公共静态字符串生成器ID(字符串stRefID)
{
随机=新随机();
int iChosenMaxSize=random.Next(0,11);
int 2=2;
int三=3;
int-four=4;
int 5=5;
int六=6;
int七=7;
int八=8;
int九=9;
int-ten=10;
int插孔=10;
int QUENE=10;
int-king=10;
int ace=11;

对于(intx=1;x不确定我是否完全理解

但是我可以看到
stRefID
是一个变量
local
GenerateID
函数

如果您需要以
Hit.stRefID
的身份访问它,那么
stRefID
应该是静态类成员

尝试将
stRefID
添加为全局
Class
变量

public class Hit
{
    public static string stRefID = "";

    public static string GenerateID(int MinSize, int MaxSize)
    {
       //Your logic
    }

不知道我是否完全理解

但是我可以看到
stRefID
是一个变量
local
GenerateID
函数

如果您需要以
Hit.stRefID
的身份访问它,那么
stRefID
应该是静态类成员

尝试将
stRefID
添加为全局
Class
变量

public class Hit
{
    public static string stRefID = "";

    public static string GenerateID(int MinSize, int MaxSize)
    {
       //Your logic
    }

无法访问在方法中定义的变量。stRefID的作用域严格位于GenerateID内。根据您的类,如果要访问stRefID的值,需要调用
Hit。GenerateID
,这将返回stRefID的值。变量的作用域在C#中非常重要(与所有编程语言一样).我建议您查看一下

您不能访问在方法中定义的变量。stRefID的作用域严格位于GenerateID内。根据您的类,如果您想访问stRefID的值,您需要调用
Hit.GenerateID
,这将返回stRefID的值。变量的作用域在C#中非常重要(与所有编程语言一样)。我建议您看看您所做的是将
stRefID
变量声明在方法
GenerateID
的范围内,这将不起作用,因此您可以做的是将该变量放在类的范围内,然后您可以像这样使用它

namespace Blackjack
   {
    public class Hit
      {
       string stRefID = "";

       public static string GenerateID(int MinSize, int MaxSize)
        {
        Random random = new Random();

        int iChosenMaxSize = random.Next(0, 11);

        int two = 2;
        int three = 3;
        int four = 4;
        int five = 5;
        int six = 6;
        int seven = 7;
        int eight = 8;
        int nine = 9;
        int ten = 10;
        int jack = 10;
        int queen = 10;
        int king = 10;
        int ace = 11;


     for (int x = 1; x <= iChosenMaxSize; x++)
    {
        int iCharType = random.Next(0, 12);
        switch (iCharType)
        {
                case 0:
                    stRefID += two;
                    break;
                case 1:
                    stRefID += three;
                    break;
                case 2:
                    stRefID += four;
                    break;
                case 3:
                    stRefID += five;
                    break;
                case 4:
                    stRefID += six;
                    break;
                case 5:
                    stRefID += seven;
                    break;
                case 6:
                    stRefID += eight;
                    break;
                case 7:
                    stRefID += nine;
                    break;
                case 8:
                    stRefID += ten;
                    break;
                case 9:
                    stRefID += ace;
                    break;
                case 10:
                    stRefID += jack;
                    break;
                case 11:
                    stRefID += queen;
                    break;
                case 12:
                    stRefID += king;
                    break;

            }
         } return stRefID; 

    }
名称空间21点
{
公课热门
{
字符串stRefID=“”;
公共静态字符串GenerateID(int MinSize,int MaxSize)
{
随机=新随机();
int iChosenMaxSize=random.Next(0,11);
int 2=2;
int三=3;
int-four=4;
int 5=5;
int六=6;
int七=7;
int八=8;
int九=9;
int-ten=10;
int插孔=10;
int QUENE=10;
int-king=10;
int ace=11;

对于(int x=1;x你所做的事情被声明为
stRefID
变量在方法
GenerateID
的范围内,这是行不通的,所以你能做的就是把这个变量放在类的范围内,然后你可以像这样使用它

namespace Blackjack
   {
    public class Hit
      {
       string stRefID = "";

       public static string GenerateID(int MinSize, int MaxSize)
        {
        Random random = new Random();

        int iChosenMaxSize = random.Next(0, 11);

        int two = 2;
        int three = 3;
        int four = 4;
        int five = 5;
        int six = 6;
        int seven = 7;
        int eight = 8;
        int nine = 9;
        int ten = 10;
        int jack = 10;
        int queen = 10;
        int king = 10;
        int ace = 11;


     for (int x = 1; x <= iChosenMaxSize; x++)
    {
        int iCharType = random.Next(0, 12);
        switch (iCharType)
        {
                case 0:
                    stRefID += two;
                    break;
                case 1:
                    stRefID += three;
                    break;
                case 2:
                    stRefID += four;
                    break;
                case 3:
                    stRefID += five;
                    break;
                case 4:
                    stRefID += six;
                    break;
                case 5:
                    stRefID += seven;
                    break;
                case 6:
                    stRefID += eight;
                    break;
                case 7:
                    stRefID += nine;
                    break;
                case 8:
                    stRefID += ten;
                    break;
                case 9:
                    stRefID += ace;
                    break;
                case 10:
                    stRefID += jack;
                    break;
                case 11:
                    stRefID += queen;
                    break;
                case 12:
                    stRefID += king;
                    break;

            }
         } return stRefID; 

    }
名称空间21点
{
公课热门
{
字符串stRefID=“”;
公共静态字符串GenerateID(int MinSize,int MaxSize)
{
随机=新随机();
int iChosenMaxSize=random.Next(0,11);
int 2=2;
int三=3;
int-four=4;
int 5=5;
int六=6;
int七=7;
int八=8;
int九=9;
int-ten=10;
int插孔=10;
int QUENE=10;
int-king=10;
int ace=11;

对于(int x=1;x这是一个可变范围问题。如果他将stRefID设置为静态,则有可能在给它分配有用的值之前访问它。除此之外,除非他调用
GenerateID
,该值将永远不会更改,它当前返回的stRefID值与他正在寻找的值相同。@TheGreatCO:Ya我可以看到范围问题。但我是我不知道他为什么要把
按钮公诸于众。是的,我觉得差不多一样……然后我也不知道为什么
GenerateID
也需要是静态的。@DimitarDimitrov:因为我们没有看到
GenerateID
函数调用,所以很难猜测。@user2400333您没有设置静态stRefID。不仅如此,您的原始代码运行良好,只是使用不当。您需要调用
GenerateID
并使用从中返回的值。您不需要静态类成员。这在许多级别的编码中都是不好的。这是一个可变范围问题。如果他将stRefID设为静态,他可能会在分配有用的val之前访问它最重要的是,除非他调用
GenerateID
,当前返回stRefID的值,就像他正在寻找的一样,@TheGreatCO:Ye,我可以看到范围问题。但我不确定他为什么要尝试公开
按钮
。是的,我几乎是一样的…然后再次不确定为什么
基因rateID
也需要是静态的。@DimitarDimitrov:因为我们没有看到
GenerateID
函数调用,所以很难做出正确的判断