Cod*_*key 2 c# enums dictionary
我不确定我是否在这里滥用Enums.也许这不是最好的设计方法.
我有一个枚举,它声明了执行批处理文件的方法的可能参数.
public enum BatchFile
{
batch1,
batch2
}
Run Code Online (Sandbox Code Playgroud)
然后我有我的方法:
public void ExecuteBatch(BatchFile batchFile)
{
string batchFileName;
...
switch (batchFile)
{
case BatchFile.batch1:
batchFileName = "Batch1.bat";
break;
case BatchFile.batch2:
batchFileName = "Batch2.bat";
break;
default:
break;
}
...
ExecuteBatchFile(batchFileName);
}
Run Code Online (Sandbox Code Playgroud)
所以我想知道这是否是合理的设计.
我想的另一个选择是在构造函数中创建一个Dictionary <>,如下所示:
Dictionary<BatchFile, String> batchFileName = new Dictionary<BatchFile, string>();
batchFileName.Add(BatchFile.batch1, "batch1.bat");
batchFileName.Add(BatchFile.batch2, "batch2.bat");
Run Code Online (Sandbox Code Playgroud)
然后我会去,而不是使用switch语句:
public void ExecuteBatch(BatchFile batchFile)
{
ExecuteBatchFile(batchFileName[batchFile]);
}
Run Code Online (Sandbox Code Playgroud)
我猜测后者是更好的方法.
我可能会按照以下方式进行设计:
public interface IBatchFile
{
void Execute();
}
public class BatchFileType1 : IBatchFile
{
private string _filename;
public BatchFileType1(string filename)
{
_filename = filename;
}
...
public void Execute()
{
...
}
}
public class BatchFileType2 : IBatchFile
{
private string _filename;
public BatchFileType2(string filename)
{
_filename = filename;
}
...
public void Execute()
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,我将任何常见功能提取到BatchFile基类中