当我通过其他脚本调用此方法时,为什么会出现NullReferenceException?

时间:2017-01-14 00:46:12

标签: c# nullreferenceexception text-to-speech

我正致力于这个语音识别和文本到语音的项目。我有三个脚本,一个是Form.cs,另一个是文本到语音的脚本(Voice.cs),另一个是其他方法Auxiliary.csVoice.cs正常变量SpeechSynthesizer synth = new SpeechSynthesizer();

然后我有void

public void Say(string speech)
{
   synth.SpeakAsync (speech);
}

当我在Voice.Say(string)脚本中调用Form.cs时,它很有效,当我从Auxiliary.cs调用NullReferenceException时,它会在合成器中抛出Auxiliary.cs

为什么会这样?我的意思是,表单脚本以与 //Form1.cs public partial class Form1 : Form { public Auxiliary auxiliary; public Voice voice; public void Form1_Load () { voice = new Voice (); auxiliary = new Auxiliary(); voice.Say("Hi, Patrick"); } } //Auxiliary.cs public class Auxiliary { public Voice voice; public void Start() { voice = new Voice(); voice.Say("Hi"); } } //Voice.cs public class Voice { public SpeechSynthesizer synth; public void Start() { synth = new SpeechSynthesizer(); } public void Say(string speech) { synth.SpeakAsync(speech); } }

完全相同的方式调用它

很抱歉,如果这个问题已经存在,我在整个网站上搜索了它,但是却什么也没找到。

编辑:这些是代码。

var pos = userMarker.getPosition();
console.log( pos.lat(), pos.lng() );

1 个答案:

答案 0 :(得分:0)

这是一个很好的做法,为类添加具有适当参数的构造函数。

Using Constructors (C# Programming Guide)

在你的情况下,从不调用方法Voice.Start(),因此没有synth对象的实例。

// Voice.cs
public class Voice
{
    public SpeechSynthesizer synth;

    public Voice()
    {
        Start();
    }

    public void Start()
    {
        synth = new SpeechSynthesizer();
        synth.SetOutputToDefaultAudioDevice();
    }

    public void Say(string speech)
    {
        synth.SpeakAsync(speech);
    }
}