Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理条件语句的最佳方法_C# - Fatal编程技术网

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一样,我在练习布尔值。我将来会改变。考虑到代码中的所有问题,这可能是影响最小的一个。考虑到代码中的所有问题,这可能是影响最小的一个。