使用接口清理FileInfo.name开关/ case语句

时间:2015-04-01 15:09:34

标签: c# oop interface

我有以下内容:

foreach(var file in today.GetFiles())
{
    if(file.Length > 0 && file.Extension == ".txt")
    {
        switch (file.Name)
        {
            case "realy_long_ugly_file_name_0":
                //do something
                break;
            case "realy_long_ugly_file_name_1":
                //do something else
                break;
        }
    }
}

我遇到了this post并认为我可以使用interface来清理我的代码。这是否适合这种情况?我已经设置了界面和继承,但不太知道如何继续。

我理解界面根据classIPizza成员的身份调用IList<IPizza>。我很难理解如何将file.Name(以前使用switch/case)传递给我的interface来调用不同的类。

interface IMyFiles
{
    void Process(FileInfo file);
}

public class FileName0 : IMyFiles
{
    void IMyFiles.Process(FileInfo file)
    {
        //do somthing specific to FileName0
    }
}

public class FileName1 : IMyFiles
{
    void IMyFiles.Process(FileInfo file)
    {
        //do somthing specific to FileName1
    }
}

2 个答案:

答案 0 :(得分:0)

您的目标是将基于文件的不同类型的处理封装到自己的对象中。

这些是我看到的选项:

  1. IMyFiles对象决定它们处理什么(您可以通过在具体实现的方法开头使用if来实现此目的)。基本上创建一个包含IMyFiles和调用过程的所有类的集合,直到有人知道它需要提取它为止。
  2. 使用switch语句创建一个工厂,以便它返回IMyFile的实例,然后只调用process。这样决定了我(建筑)和我能做什么(是分开的)。

答案 1 :(得分:0)

如果所有文件具有相似的列但数据的变化如第一列有3列而其他有x列,我们可以有其他选择的编程,但如果文件完全不同那么这是很好的代码,它可读并记录