c#对象在当前上下文中不存在

时间:2018-01-21 05:47:29

标签: c# constructor

免责声明我是C#的新手。我很可能做了一些非常错误的事情,但我不知道什么来尝试 Google 等所以我希望有人可以告诉我我做错了什么

无论如何,我正在用createPlayer方法用我的构造函数创建一个玩家对象,我可以打印创建对象的值,但是之后我再也无法打印它了,它说:

  

当前上下文中不存在player1。

我该怎么办?

主文件

using System;

namespace project
{
    class Program
    {
        static void Main(string[] args)
        {
                createPlayer();

            Console.WriteLine(player1.Name); //Doesn't exist in current context
            Console.ReadKey();
        }
        static public void createPlayer()
        {
            Console.WriteLine("\nType in your name :");
            Player player1 = new Player(Console.ReadLine()); 
            Console.WriteLine("\n Name: " + player1.Name + "\n Speed: " + player1.Speed + "\n Defence: " + player1.Defence + "\n Damage: " + player1.Damage);
            Console.WriteLine("\nPress 1 to continue, Press 2 to reroll.");
        }
    }
}

构造

 using System;

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

namespace projekti
{
    public class Player
    {
        public string Name;
        public int Speed;
        public int Damage;
        public int Defence;
        public int Health;
        public Player(string nm)
        {
            Name = nm;
            Random r = new Random();
            Speed = r.Next(1, 26);
            Damage = r.Next(1, 26);
            Defence = r.Next(1, 26);
            Health = 100;
        }
    }
}

3 个答案:

答案 0 :(得分:4)

player1createPlayer()中实例化,因此在本地作用于该函数。如果您想让其他功能访问它,您可以createPlayer()返回player1

static void Main(string[] args)
{
    var player1 = createPlayer();

    Console.WriteLine(player1.Name);
    Console.ReadKey();
}
static public Player createPlayer()
{
    Console.WriteLine("\nType in your name :");
    Player player1 = new Player(Console.ReadLine()); 
    Console.WriteLine("\n Name: " + player1.Name + "\n Speed: " + player1.Speed + "\n Defence: " + player1.Defence + "\n Damage: " + player1.Damage);
    Console.WriteLine("\nPress 1 to continue, Press 2 to reroll.");

    return player1;
}

答案 1 :(得分:1)

问题是你在 createPlayer() 方法中创建了 Player 的对象所以 播放器 的对象仅限于该块。所以你不能在这种方法中使用它。

好的,你可以这样做

*

driver.Navigate().GoToUrl(url);
driver.Manage().Window.Maximize();

*

所以你的createPlayer方法将返回你创建的当前对象,你将能够在main中使用它。

答案 2 :(得分:-1)

垃圾收集器(GC)将player1放置在范围} 的末尾,因此在Console.WriteLine(player1.Name);对象player1中是活着。

您需要为public实例创建Player属性。您可以按照此规范解决您的问题。

namespace project
{
 class Program
 {
    public static Player player1{get;set;}
    static void Main(string[] args)
    {
        createPlayer();
        Console.WriteLine(player1.Name); 
        Console.ReadKey();
    }
    public static void createPlayer()
    {
        Console.WriteLine("\nType in your name :");
        player1 = new Player(Console.ReadLine());
    .
    .
    .
    }
}