C# 处理条件语句的最佳方法
我在代码中使用了以下条件,但这看起来不是很有效,这有更好的处理方法吗C# 处理条件语句的最佳方法,c#,C#,我在代码中使用了以下条件,但这看起来不是很有效,这有更好的处理方法吗 if (ic = filename.Contains(".wmv")) { if (bitnumber > 400) { path = "ftp://" + ftpServerIP + "/" + "media" + "/" + "lib" + "/" + programName + "/" + date + "/"; UploadCondition(path, filen
if (ic = filename.Contains(".wmv"))
{
if (bitnumber > 400)
{
path = "ftp://" + ftpServerIP + "/" + "media" + "/" + "lib" + "/" + programName + "/" + date + "/";
UploadCondition(path, filename);
//return path;
}
}
if (ic = filename.Contains(".wmv"))
{
if (bitnumber < 400)
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
//return path;
}
}
if (ic = filename.Contains(".m4v"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
if (ic = filename.Contains(".mp4"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
if (ic = filename.Contains(".flv"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
if (ic = filename.Contains(".mpg"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
if (ic = filename.Contains(".aac"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "audio" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
if (ic = filename.Contains(".mp3"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "audio" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
至少可以将其转换为if/elseif语句:
if (ic....)
{
...
} else if (ic...) {
...
}
至少可以将其转换为if/elseif语句:
if (ic....)
{
...
} else if (ic...) {
...
}
我假设,您的文件名有时会是.m4v、.flv、.mp4等…因此代码如下
if (ic = filename.Contains(".wmv"))
{
if (bitnumber > 400)
{
path = "ftp://" + ftpServerIP + "/" + "media" + "/" + "lib" + "/" + programName + "/" + date + "/";
UploadCondition(path, filename);
//return path;
}
else
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
//return path;
}
}
else if (ic = filename.Contains(".m4v"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
else if (ic = filename.Contains(".mp4"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
else if (ic = filename.Contains(".flv"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
else if (ic = filename.Contains(".mpg"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
else if (ic = filename.Contains(".aac"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "audio" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
else if (ic = filename.Contains(".mp3"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "audio" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
else
{
//No Match found
}
最好的方法是使用SwitchfileExtn,我想,有时你的文件名可能是.m4v、.flv、.mp4等等,所以代码就在这里
if (ic = filename.Contains(".wmv"))
{
if (bitnumber > 400)
{
path = "ftp://" + ftpServerIP + "/" + "media" + "/" + "lib" + "/" + programName + "/" + date + "/";
UploadCondition(path, filename);
//return path;
}
else
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
//return path;
}
}
else if (ic = filename.Contains(".m4v"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
else if (ic = filename.Contains(".mp4"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
else if (ic = filename.Contains(".flv"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
else if (ic = filename.Contains(".mpg"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
else if (ic = filename.Contains(".aac"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "audio" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
else if (ic = filename.Contains(".mp3"))
{
path = "ftp://" + ftpServerIP + "/" + "mpegmedia" + "/" + "news" + "/" + programName + "/" + "audio" + "/" + "podcast" + "/";
UploadCondition(path, filename);
}
else
{
//No Match found
}
最好的方法是使用SwitchfileExtn将其分解到其他类中,如:
public class AudioFileValidator
{
private List<string> _extensions = new List<string>{".aac", ".mp3"};
public bool IsValid(string filename)
{
if (!_extensions.Contains(Path.GetExtension(filename))
return false;
//validate bitrate etc
}
}
通过这样做,您将获得具有单一职责的类,这些类可以在其他地方重用,并且易于单元测试
您甚至可以更进一步,引入一个名为IMediaFileValidator的新接口,所有验证器都可以实现该接口。然后做一些类似的事情:
foreach (var validator in validators)
{
if (validator.IsValid(filename))
{
// use info from the validator to build the path
var mediaName = validator.MediaName;
path = "ftp://" + ftpServerIP + "/" + mediaName + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
break;
}
}
这也会使您的代码遵循打开/关闭原则。将其分解为其他类,如:
public class AudioFileValidator
{
private List<string> _extensions = new List<string>{".aac", ".mp3"};
public bool IsValid(string filename)
{
if (!_extensions.Contains(Path.GetExtension(filename))
return false;
//validate bitrate etc
}
}
通过这样做,您将获得具有单一职责的类,这些类可以在其他地方重用,并且易于单元测试
您甚至可以更进一步,引入一个名为IMediaFileValidator的新接口,所有验证器都可以实现该接口。然后做一些类似的事情:
foreach (var validator in validators)
{
if (validator.IsValid(filename))
{
// use info from the validator to build the path
var mediaName = validator.MediaName;
path = "ftp://" + ftpServerIP + "/" + mediaName + "/" + "news" + "/" + programName + "/" + "video" + "/" + "podcast" + "/";
UploadCondition(path, filename);
break;
}
}
这也会使您的代码遵循开放/封闭原则。您可以将其简化为
if (filename.Contains(".wmv"))
// path = set the path as you require
在所有的ifs结束后调用你的方法
UploadCondition(path, filename);
最好是从文件名中提取扩展名.wmv、.m4v,并将其转换为一个开关,通过该开关可以设置路径。您可以将其简化为
if (filename.Contains(".wmv"))
// path = set the path as you require
在所有的ifs结束后调用你的方法
UploadCondition(path, filename);
最好是从文件名中提取扩展名.wmv、.m4v,并将其转换为一个开关,通过该开关可以设置路径。您需要进行大量重构。以下是一些让您开始学习的想法: 使用String.Format并只传入已更改的值以保存所有重复文本 构建扩展/扩展组合键的字典,并将值设置为目标路径。然后,只需要一次查找,而不需要大嵌套if-else语句 使用Path.GetExtension而不是Contains更准确 例如
您将需要进行大量重构。以下是一些让您开始学习的想法: 使用String.Format并只传入已更改的值以保存所有重复文本 构建扩展/扩展组合键的字典,并将值设置为目标路径。然后,只需要一次查找,而不需要大嵌套if-else语句 使用Path.GetExtension而不是Contains更准确 例如
这是一个很好的解决问题的简短方法,我相信它可以处理if语句处理的所有情况
String[] videoExtensions = { "wmv", "m4v", "mp4", "flv" };
String[] audioExtensions = { "aac", "mp3" };
String ext = Path.GetExtension(filename).ToLower();
String path = "ftp://" + ftpServerIP + "/";
if (-1 != Array.IndexOf(videoExtensions, ext)) {
if ("wmv".equals(ext) && bitnumber > 400)
path += "media/lib/" + programName + "/" + date + "/";
else
path += "mpegmedia/news/" + programName + "/video/podcast/";
}
else if (-1 != Array.IndexOf(audioExtensions, ext)) {
path += "mpegmedia/news/" + programName + "/audio/podcast/";
}
else {
// handle unknown extension types as desired
}
UploadCondition(path, filename);
这是一个很好的解决问题的简短方法,我相信它可以处理if语句处理的所有情况
String[] videoExtensions = { "wmv", "m4v", "mp4", "flv" };
String[] audioExtensions = { "aac", "mp3" };
String ext = Path.GetExtension(filename).ToLower();
String path = "ftp://" + ftpServerIP + "/";
if (-1 != Array.IndexOf(videoExtensions, ext)) {
if ("wmv".equals(ext) && bitnumber > 400)
path += "media/lib/" + programName + "/" + date + "/";
else
path += "mpegmedia/news/" + programName + "/video/podcast/";
}
else if (-1 != Array.IndexOf(audioExtensions, ext)) {
path += "mpegmedia/news/" + programName + "/audio/podcast/";
}
else {
// handle unknown extension types as desired
}
UploadCondition(path, filename);
使用switch语句和System.IO.Path.GetExtension
我猜您可能需要最后一个块的变体,但这应该很容易修改。使用switch语句和System.IO.Path.GetExtension
我猜你会想要最后一个块的变体,但这应该很容易修改。只是文件名。Contains也应该计算,用ic做什么?也许你可以提取扩展名并将其转换成一个开关。这里有些错误,你为什么需要这个ic?看看jgauffin的回答。你有很多重复的代码。每当你看到这一点时,请看看如何提取方法。非常感谢你们所有人提供了这么多的想法。@iamstapper,我想像使用iffilename.Contains.m4v一样使用它,我在练习布尔值。我将来会更改。只需filename.Contains也应该计算,ic有什么用?也许你可以提取扩展并把它转换成一个开关这里出了什么问题,为什么你需要这个ic?看看jgauffin的回答。你有很多重复的代码。每当你看到这一点时,请看看如何提取方法。非常感谢大家提供了这么多的想法。@iamstapper,我想用它就像iffilename.Contains.m4v一样,我在练习布尔值。我将来会改变。考虑到代码中的所有问题,这可能是影响最小的一个。考虑到代码中的所有问题,这可能是影响最小的一个。