C# 不是所有的代码路径都返回值,尽管我确实有返回值?
我试图根据输入返回一些字段,如手机、主地址、cityStateZip、服务器设置,我已经实现了一个有趣的switch语句,但很明显,我在所有情况下都返回字符串C# 不是所有的代码路径都返回值,尽管我确实有返回值?,c#,C#,我试图根据输入返回一些字段,如手机、主地址、cityStateZip、服务器设置,我已经实现了一个有趣的switch语句,但很明显,我在所有情况下都返回字符串 public static string JsonToObjects(bool Enumerate, string jsonInputFile) { string inputFile = Path.GetFileName(jsonInputFile); // Return File Name + Extension var
public static string JsonToObjects(bool Enumerate, string jsonInputFile)
{
string inputFile = Path.GetFileName(jsonInputFile); // Return File Name + Extension
var lines = GetLines(File.ReadAllText(jsonInputFile));
var groups = lines.GroupByProximity(0.12);
var lookup = groups.ToLookup(g => g.First().Text, g => g.Skip(1).Select(line => line.Text));
var serverSetup = lookup["Server Setup"]
.First().SkipWhile(s => s.ToString().ToUpper() != "V").Skip(1).FirstOrDefault();
switch (Enumerate)
{
case true:
Log("\nEnumerating JSON items...\n");
var cellPhone = lookup["Cell Phone"].First().FirstOrDefault();
var mainAddress = lookup["Main Address"].First().FirstOrDefault();
var cityStateZip = lookup["City / State / Zip"].First().FirstOrDefault();
Log(cellPhone);
Log(mainAddress);
Log(cityStateZip);
Log(serverSetup);
Log("\n");
var pairs = lines.SkipWhile(l => l.Text != "Practice Name").Pairs();
// Ingest the lines in pairs and setup the values to go out into the CSV.
foreach (var pair in pairs)
{
Log($"{pair.Key}: {pair.Value}");
return $"{pair.Key}: {pair.Value}";
}
break;
case false:
Log("Using Cho Package...");
using (var p = new ChoJSONReader(jsonInputFile).WithJSONPath("$..readResults")) // "readResults": [
{
p.Where(r1 => r1.page == 1)
.Select(r1 =>
{
var lines = (dynamic[])r1.lines;
return new
{
FileName = inputFile,
Page = r1.page,
CellPhone = //lines[12].text,
fieldValue(lines, "Cell Phone"),
//cellPhone,
MainAddress = //lines[16].text,
fieldValue(lines, "Main Address"),
//mainAddress,
CityStateZip = //lines[18].text,
fieldValue(lines, "City / State / Zip"),
//cityStateZip,
ServerSetup = serverSetup
};
}
);
}
break;
default:
Log("Default case");
return "Default case";
break;
}
}
那么为什么我仍然会出错呢
并非所有代码路径都返回值
如果要根据应用的是true还是false大小写更改返回的内容,请更改开关中的每个中断,使其成为返回,或者在完成开关后,在方法末尾放置一个返回语句
编译器不是在开玩笑;它确实可以看到代码中不以返回结尾的路径。你也可以追踪他们。。按照你的真实情况行事。。它可以到达break,退出开关,然后在到达方法末尾之前没有返回语句。您可以肯定,pairs肯定总是有值的,但编译器对程序的了解程度与您不同,而且它不会回溯到试图找到pairs总是有值的证据。。它只是在一个循环中看到返回语句,这个循环是一个可能不会执行的块,这意味着代码可能不会命中该返回语句
如果你对默认值有错觉,在一个开关中。。在没有其他情况适用时使用。它不是每次都运行的东西,不管是否应用了其他案例,所以如果其他案例没有应用它,它不能作为一个包罗万象的东西来返回
如果您确定开关中的一个返回将被命中,那么您可以在方法结束时返回一些无用的或更好的结果,抛出一个带有有意义消息的异常,这样在6个月内,当所有这些开关语句都没有返回JSONTOBJECTS中的值时,输入值。。。开始出现在日志中,你有一个很好的指针,指出哪里出了问题,哪里出了问题。不要发出错误消息,这永远不会被击中想象成对是空的,并且foreach的主体永远不会被执行。此外,您没有在您的情况下返回假。回答的问题?在您的情况下,返回值不是false语句,而是在您的语句中的lambda函数中。选择“否”,则不会返回。我建议你阅读c语言语法的基础知识,在你的错误案例中没有返回语句。就这么简单。你需要在字符串中断之前返回它。你需要更多地考虑当事情不顺利时你想做什么。在false的情况下,如果p中没有page==1怎么办?返回将永远不会运行。然后呢?如果那样的话,你应该退还什么?事实上,如果没有配对呢?如果没有配对,返回什么是合理的?在这一部分中,一次返回就足够了。但是你没有。是的,在p.Wherer1=>r1.page==1.Selectr1=>{var lines=dynamic[]r1.lines;返回new,但这不是从方法返回的。这是从Select only返回的。这是抛开您没有对Where执行任何操作的事实,所以您还是可以删除所有代码。后退一步,解释一下您希望函数执行的操作。嗯,当我将break改为re时turn i Get Control无法从一个案例标签case:false切换到另一个案例标签case:false。另外,在case:false中,我尝试返回一个字段,如return CityStateZip,但它抱怨CityStateZip名称在当前上下文中不存在。我尝试在using内部和using外部返回它,但没有任何效果。Tha听起来好像您删除了一个中断,但没有提供返回,这意味着编译器现在可以看到代码到达下一个案例开头的路径,这在c中是不允许的。第二个问题是,听起来好像您试图在其存在的范围之外返回CityStateValue。它只存在于选择。你不能只是将一个变量从3个级别的括号嵌套中拖出3个作用域并粘贴进去。回到你在Q中的形式,在方法的末尾抛出一个异常。当代码出错时,找出为什么你可以在方法的末尾返回一些无用的东西。它解决了案例中的错误:false section wh恩,我返回了一些像return无用的东西。很好,现在我需要返回实际的字段。我尝试在选择范围内返回,但在它之外,没有一个有效,一直抱怨它在当前上下文中不存在。我想,我如何返回像这样的lambda字段?我的意思是我可以诚实地摆脱第二个因为第一个工作很好,今天到此为止,但我仍然很好奇这个案例:出于学习目的的错误工作。当代码显示Selectreturn new…,这不是你的代码所做的吗?你可以有任意多的返回。你不必将返回移出 选择怪异,因为它是做一个选择返回,您只需添加另一个。这意味着编译器会很高兴,不管发生什么,它都能返回