C# 并非所有路径都返回值
所以我的谷歌语音API在我的程序中出现了一个错误。正如标题所示,错误是“并非所有路径都返回值”。 这是代码(2个)(相同错误) 第二件:C# 并非所有路径都返回值,c#,syntax-error,C#,Syntax Error,所以我的谷歌语音API在我的程序中出现了一个错误。正如标题所示,错误是“并非所有路径都返回值”。 这是代码(2个)(相同错误) 第二件: public class Hypothesis { public string utterance; public double confidence = -1.0d;//-1 = No Value public override string To
public class Hypothesis
{
public string utterance;
public double confidence = -1.0d;//-1 = No Value
public override string ToString()
{
return "'" +utterance + "'" + ((confidence == -1) ? "" : "@" + confidence);
}
public List<Hypothesis> hypotheses = new List<Hypothesis>();
public Hypothesis getBestHypothesis()
{
if (hypotheses.Count() <=0)
return null;
Hypothesis H = hypotheses[0];
foreach (Hypothesis h in hypotheses)
{
if (h.confidence>=H.confidence)
{
H = h;
}
return H;
}
}
公共阶级假说
{
公共字符串发音;
公众双重信心=-1.0d;/-1=无值
公共重写字符串ToString()
{
返回“'”+话语+“+”+((置信度==-1)?:“@”+置信度);
}
公共列表假设=新列表();
公共假说
{
if(假设数()=H.置信度)
{
H=H;
}
返回H;
}
}
这两个代码都有相同的错误,只有当我指定某个变量名与另一个变量名(确切地说是FlacFileName)相同时,才会出现这种情况。如果你们能告诉我为什么会发生这种事,那太棒了,谢谢 您的方法签名
public static SpeechInputResult ProcessFlacFile(string FlacFileName, int BIT_RATE = DEFAULT_BIT_RATE, string language = DEFAULT_LANGUAGE, uint maxresults = 1)
声明您将返回一个SpeechInputResult
,但您没有return
语句
您应该将签名更改为void
,或者实际返回一个值
在第二个实例中,在for循环之后需要一个return语句。第一段代码没有任何return语句。在第二个代码块中,在for循环外放置一个伪return语句。在第一个方法中,您在签名中声明,它将返回类型为
SpeechInputResult
的实例,而您不从主体返回它
在第二种方法中,您是从
foreach
循环内部返回的,但是如果您的假设
列表中没有任何元素呢?您还应该从foreach
循环外部返回默认值,或者如果异常不是您期望的行为,则应该抛出异常。ProcessFlacFile
上述代码中的方法在所有情况下都应返回类型SpeechInputResult
对象
您可以在try-and-catch-as之后返回对象
try
{
}
catch
{
}
return SpeechInputResultObj
或
在try
和catch
语句中返回SpeechInputResult
对象
try
{
....
return SpeechInputResultObj;
}
catch
{
....
return SpeechInputResultObj;
}
像前面提到的每个人一样,在第一个方法的末尾添加一个
return
语句。只返回一个null代码>或任何适合您的情况。实际上,在该方法中根本没有其他return
语句,因此不像第二种情况那样“并非所有路径都返回值”。。。您可能只想将签名从SpeechInputResult
更改为void
在第二种方法中,似乎您已经涵盖了您的基础,因为:
- 如果
假设
为空且
- 如果
假设不为空,则返回的假设的“置信度”最大
但是编译器不够聪明,无法看到这一点。尝试移动返回null代码>结束。只有当列表中没有元素且foreach
循环未运行时,才能使其存在
public Hypothesis getBestHypothesis()
{
if (hypotheses.Any())
{
Hypothesis H = hypotheses[0];
foreach (Hypothesis h in hypotheses)
{
if (h.confidence >= H.confidence)
{
H = h;
}
return H;
}
}
return null;
}
此外,整个第二种方法可以减少(借助LINQ):
我发现在你的代码中你必须返回SpeechInputResult
,但是没有使用return语句的地方。
最好在代码中使用returnspeechinputresult
另一方面,如果您不愿意返回任何内容,请将您的函数如下所示
public static void ProcessFlacFile(string FlacFileName, int BIT_RATE = DEFAULT_BIT_RATE, string language = DEFAULT_LANGUAGE, uint maxresults = 1)
如果希望在这种情况下不出现错误,可以使用void代替上述代码中的类SpeechInputResult
在第二段代码中,您只实例化了代码。ie声明并直接使用它
必须为创建的对象指定某些内容,以便可以在foreach中执行操作
在这种情况下,假设里面没有任何东西
此外,您还在foreach循环中编写了return语句,其中作为焦点的语句永远不会进入foreach循环
首先,你将某件事分配给假设,使其具有价值,然后执行行动。好,这意味着代码中的所有执行路径都不会返回值。在第一个函数中没有return
语句。因此,在第一个if语句的末尾添加一个return语句?我只需要将return设置为null;在接球和比赛结束时,它成功了!
return hypotheses.OrderByDescending(x => x.confidence).FirstOrDefault();
public static void ProcessFlacFile(string FlacFileName, int BIT_RATE = DEFAULT_BIT_RATE, string language = DEFAULT_LANGUAGE, uint maxresults = 1)