我使用此方法获取文件扩展名
public string ReturnExtension(string fileExtension)
{
switch (fileExtension)
{
case ".doc":
case ".docx":
return "application/ms-word";
}
}
当我编译它时,我收到错误BaseClass.ReturnExtension(string)': not all code paths return a value
..任何建议......
答案 0 :(得分:18)
如果您从default
语句中返回,则需要添加switch
条件。
// As SLaks mentioned, you should be case in-sensitive.
// Therefore, I'm comparing only the Lower Case version of the extensio
switch(fileExtension.ToLowerInvariant())
{
case ".doc":
case ".docx":
return "application/ms-word";
default:
// You could also throw an Exception here if unknown extensions
// are truly invalid (which seems to be the more popular choice)
//
// Since it looks like you're returning a content-type for a
// download, I would default to octet-stream so the user would
// just get a download window.
return "application/octet-stream";
}
答案 1 :(得分:17)
如果fileExtension不是“.doc”或“.docx”,则您尚未指定该方法应返回的内容。您可以通过向switch语句添加默认大小写来完成此操作。假设其他fileExtension值无效,则应抛出异常:
public string ReturnExtension(string fileExtension)
{
switch (fileExtension)
{
case ".doc":
case ".docx":
return "application/ms-word";
default:
throw new ArgumentException(string.Format("Invalid fileExtension '{0}'.", fileExtension));
}
}
答案 2 :(得分:4)
您需要默认值,或者需要返回switch
以外的内容。
default:
Console.WriteLine("Default case");
return "";
答案 3 :(得分:3)
这是编译器可以发出的更好的错误消息之一。这意味着:并非所有代码路径都返回一个值。
通过分支while
,if
和switch
等语句来创建代码路径。
编译器试图保证,只要运行时执行此函数,就会返回指定类型的值(此处为:string
)。
在您的示例中,未定义集fileextension
中的(doc, docx)
的返回值。你可以
default
声明中指定switch
子句return "text/plain"
?)答案 4 :(得分:1)
编译器从源代码中派生control flow graph并发现并非所有路径都被覆盖,例如,如果传入fileExtension“.rtf”,则此函数无法提供返回值。
因此要么在函数末尾提供返回“something”,要么只是为switch的“default:”情况抛出异常。当它既没有看到“.doc”或“.docx”时,你必须决定函数需要做什么。
答案 5 :(得分:1)
问问自己fileExtension为.xls
时会发生什么。您必须在默认情况下或在switch语句之后返回一些内容:
public string ReturnExtension(string fileExtension)
{
switch (fileExtension)
{
case ".doc":
case ".docx":
return "application/ms-word";
}
return "unknown"; // this path wasn't returning anything
}
答案 6 :(得分:1)
您在上一个案例陈述中需要default
和break
或break
。
答案 7 :(得分:0)
只是我的0.10美元,很清楚内容标题是在这里返回的,所以如果我们不识别文件扩展名,而不是抛出异常或无效的MIME标头信息(例如,“未知”),我们应该返回将文件作为octect流发送到浏览器,如下所示:
public string ReturnExtension(string fileExtension)
{
switch (fileExtension)
{
case ".doc":
case ".docx":
return "application/ms-word";
default:
return "application/octet-stream";
}
}
通过这种方式,我们可以适应未来5年的情况,M $发布MS-Word v30.1,扩展名变为“.docz”,系统不会抛出异常,而是调用MS-Word(更多)优雅地,尽管没有使用“application / ms-word”将会增强IE的行为。