Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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#,我想申报以下事项: var simlBot = new SimlBot(); var botUser = simlBot.CreateUser(); var packageString = File.ReadAllText("SIMLPackage.simlpk"); simlBot.PackageManager.LoadFromString(packageString); 如果我直接在我得到的

我想申报以下事项:

            var simlBot = new SimlBot();

            var botUser = simlBot.CreateUser();

            var packageString = File.ReadAllText("SIMLPackage.simlpk");
            simlBot.PackageManager.LoadFromString(packageString);
如果我直接在我得到的类中声明它:“上下文关键字'var'可能只出现在局部变量声明或脚本代码中”

我不能在if语句中声明它,因为我不能从外部访问它

        if (hasBotBeenCreated == false)
        {
            var simlBot = new SimlBot();

            var botUser = simlBot.CreateUser();

            var packageString = File.ReadAllText("SIMLPackage.simlpk");
            simlBot.PackageManager.LoadFromString(packageString);
        }
我需要在函数中使用以下表单:

        var chatRequest = new ChatRequest(textReceived, botUser);
        var chatResult = simlBot.Chat(chatRequest);
我能做什么?问题是最后一段代码无法访问用户和simlBot。我现在的工作方式是每次调用函数时都重新创建对象,但这需要很多时间

我的完整代码是

public partial class Form1 : Form
{
    string textEntered = "";

    string response = "";

    SpeechSynthesizer synth = new SpeechSynthesizer();

    bool hasBotBeenCreated = false;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        textEntered = textBox1.Text;

        textBox1.Text = "";

        if (textEntered != "")
        {
            sendToAI(textEntered);
        }
    }

    void sendToAI(string textReceived)
    {
        listBox1.Items.Add(textEntered);

        response = getResponse(textEntered);

        listBox1.Items.Add(response);
        synth.Speak(response);
    }

    string getResponse(string textReceived)
    {
        if (hasBotBeenCreated == false)
        {
            var simlBot = new SimlBot();

            var botUser = simlBot.CreateUser();

            var packageString = File.ReadAllText("SIMLPackage.simlpk");
            simlBot.PackageManager.LoadFromString(packageString);
        }

        var chatRequest = new ChatRequest(textReceived, botUser);//These two can't access the objects created above
        var chatResult = simlBot.Chat(chatRequest);

        if (chatResult.Success)
        {
            var botMessage = chatResult.BotMessage;
            return botMessage;
        }
        else
        {
            return "I don't have a response for that";
        }
    }
}
修订2:

    string getResponse(string textReceived)
    {
        SimlBot simlBot;

        BotUser botUser;

        if (hasBotBeenCreated == false)
        {
            simlBot = new SimlBot();

            botUser = simlBot.CreateUser();

            var packageString = File.ReadAllText("SIMLPackage.simlpk");
            simlBot.PackageManager.LoadFromString(packageString);
        }

        var chatRequest = new ChatRequest(textReceived, botUser); //These get the error
        var chatResult = simlBot.Chat(chatRequest);
        if (chatResult.Success)
        {
            var botMessage = chatResult.BotMessage;
            return botMessage;
        }
        else
        {
            return "I don't have a response for that";
        }
    }
增加成员:

 SimlBot simlBot;
 WhatEverTypeOfCreateUserIs botUser;
然后初始化它们:

    if (hasBotBeenCreated == false)
    {
        simlBot = new SimlBot();

        botUser = simlBot.CreateUser();

       ....
    }
----------完整代码----------


不要将其声明为
var
,而是将其声明为
ChatRequest ChatRequest
对不起,我编辑了我的问题。我的问题是无法从函数内部访问botUser和simlBot。您需要显示整个定义。显示可能在任何地方的代码片段,然后显示可能在任何其他地方(甚至在不同的文件中)的代码片段,然后询问为什么一个不能访问另一个,这并不能给我们提供更多的信息。阅读如何创建一个新的目标。有很多方法,但这些都取决于你想要实现的目标。不要从一个角度看它,我需要从那里访问它。而是对代码进行建模,以反映您试图实现的目标。没有更多的背景,很难给你建议。最简单的方法是添加
simlBot
botUser
作为类的成员。我添加了完整的代码,声明工作正常,但当我尝试使用它时,它说:“使用未分配的局部变量‘botUser’”和“使用未分配的局部变量‘simlBot’”,它们不是局部变量。在
bool hasBotBeenCreated=false之后直接声明它们确保您还从函数中的
var SimlBot
botUser
删除了
var
。我已经添加了完整的代码。您已经将它们声明为局部变量。如果希望它们的使用寿命长于函数的使用寿命,则需要在类中声明它们。
public partial class Form1 : Form
{
    string textEntered = "";

    string response = "";

    SpeechSynthesizer synth = new SpeechSynthesizer();

    bool hasBotBeenCreated = false;

    SimlBot simlBot;

    BotUser botUser;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        textEntered = textBox1.Text;

        textBox1.Text = "";

        if (textEntered != "")
        {
            sendToAI(textEntered);
        }
    }

    void sendToAI(string textReceived)
    {
        listBox1.Items.Add(textEntered);

        response = getResponse(textEntered);

        listBox1.Items.Add(response);
        synth.Speak(response);
    }

    string getResponse(string textReceived)
    {
        if (hasBotBeenCreated == false)
        {
            simlBot = new SimlBot();

            botUser = simlBot.CreateUser();

            var packageString = File.ReadAllText("SIMLPackage.simlpk");
            simlBot.PackageManager.LoadFromString(packageString);
        }

        var chatRequest = new ChatRequest(textReceived, botUser);//These two can't access the objects created above
        var chatResult = simlBot.Chat(chatRequest);

        if (chatResult.Success)
        {
            var botMessage = chatResult.BotMessage;
            return botMessage;
        }
        else
        {
            return "I don't have a response for that";
        }
    }
}