如何使用反射代替开关case-C#
由于缺乏信息,我已编辑了上一个问题如何使用反射代替开关case-C#,c#,reflection,switch-statement,C#,Reflection,Switch Statement,由于缺乏信息,我已编辑了上一个问题 我已经编写了一个名为ReaderFactory的类,在其中我创建了一个方法GetAReader(string filename)。该方法使用其文件扩展名返回一个reader。我用switch-case来选择特定的读者。但是我的导师建议我使用反射而不是switch-case。我已经开始学习反射,并被它的行为所困扰。如何在代码中实现反射而不是开关大小写?GetAReader方法如下所示: public static IReader GetARe
我已经编写了一个名为ReaderFactory的类,在其中我创建了一个方法GetAReader(string filename)。该方法使用其文件扩展名返回一个reader。我用switch-case来选择特定的读者。但是我的导师建议我使用反射而不是switch-case。我已经开始学习反射,并被它的行为所困扰。如何在代码中实现反射而不是开关大小写?GetAReader方法如下所示:
public static IReader GetAReader(string _fileName)
{
fileName = _fileName;
fileExtension = Path.GetExtension(fileName);
switch (fileExtension)
{
case ".txt":
TextFileReader _textReader = new TextFileReader(fileName);
_textReader.ReadData();
return _textReader;
case ".pdf":
PDFReader _pdfReader = new PDFReader(fileName);
_pdfReader.ReadData();
return _pdfReader;
case ".doc":
//reader initialize
case ".rtf":
//reader initialize
case ".docx":
//reader initialize
case ".jpg":
//reader initialize
}
return null;
}
公共静态IReader GetAReader(字符串\u文件名)
{
文件名=_文件名;
fileExtension=Path.GetExtension(文件名)
交换机(文件扩展名)
{
案例“.txt”:
TextFileReader _textReader=新的TextFileReader(文件名);
_textReader.ReadData();
返回文本阅读器;
案例“.pdf”:
PDFReader _PDFReader=新的PDFReader(文件名);
_pdfReader.ReadData();
返回pdfReader;
案例“.doc”:
//读卡器初始化
案例“.rtf”:
//读卡器初始化
案例“.docx”:
//读卡器初始化
案例“.jpg”:
//读卡器初始化
}
返回null;
}
反射是一种非常复杂的东西,但可以用于各种各样的事情。
一些例子:
- 通过指定名称读取属性
- 加载程序集并获取它的所有类型
- 读取属性
Alo,这里有一些文档可以帮助您入门:反射是一种非常复杂的东西,但可以用于各种各样的事情。 一些例子:
- 通过指定名称读取属性
- 加载程序集并获取它的所有类型
- 读取属性
Alo,这里有一些文档可以帮助您开始:“请向我重复文档的大部分内容。我懒得阅读文档,但我保证,如果您复制/粘贴它,我不会懒得阅读它。”我敦促您不要作为初学者阅读反射,它的“力量”可能会鼓励你们在应该应用语言核心概念的领域使用它。我看到“初学者”和“反思”有六个词。这不是好兆头……”请向我重复文档的大部分内容。我懒得阅读文档,但我保证,如果你复制/粘贴它,我不会懒得阅读。我敦促你不要作为初学者阅读反射,它的“力量”可能会鼓励你们在应该应用语言核心概念的领域使用它。我看到“初学者”和“反思”有六个词。这不是好兆头…我编辑了我的问题。你能详细解释一下这些问题吗?我不理解错了,但是已经有很多关于反思的文章了。你能解释一下你为什么需要它吗?我这样问是因为反射非常昂贵,如果有一个内置的.NET解决方案,可能会更快。我会给你你需要的解释,但我只是想避免使用需要不必要资源的代码。我编写了一个名为Reader的类。我使用switch case来选择文件扩展名。由于有很多文件类型,我的导师建议我使用反射而不是switch case。我开始阅读有关反射的内容,并陷入了动态加载程序集文件的困境。所以你能给我解释一下如何使用反射而不是开关盒吗?但是我在网上浏览了一下,看到了StackOverflow上的这篇文章。这是一个讨论,看看什么是更快的切换或反射。切换总是会更快,但也许阅读这篇文章是个好主意。如果您还有任何问题,请随时回来。谢谢您的帮助:)我编辑了我的问题。你能详细解释一下这些问题吗?我不理解错了,但是已经有很多关于反思的文章了。你能解释一下你为什么需要它吗?我这样问是因为反射非常昂贵,如果有一个内置的.NET解决方案,可能会更快。我会给你你需要的解释,但我只是想避免使用需要不必要资源的代码。我编写了一个名为Reader的类。我使用switch case来选择文件扩展名。由于有很多文件类型,我的导师建议我使用反射而不是switch case。我开始阅读有关反射的内容,并陷入了动态加载程序集文件的困境。所以你能给我解释一下如何使用反射而不是开关盒吗?但是我在网上浏览了一下,看到了StackOverflow上的这篇文章。这是一个讨论,看看什么是更快的切换或反射。切换总是会更快,但也许阅读这篇文章是个好主意。如果您还有任何问题,请随时回来。谢谢您的帮助:)