如何在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";
}
}
}