如何使用反射代替开关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; }
反射是一种非常复杂的东西,但可以用于各种各样的事情。 一些例子:

  • 通过指定名称读取属性
  • 加载程序集并获取它的所有类型
  • 读取属性
简而言之,通过反射,您可以将任何.NET代码反编译为C#/VB或任何其他IL语言

我建议您看看telerik的反编译器(这是一个可以查看dll源代码的工具)。然后你就知道反射是什么了


Alo,这里有一些文档可以帮助您入门:

反射是一种非常复杂的东西,但可以用于各种各样的事情。 一些例子:

  • 通过指定名称读取属性
  • 加载程序集并获取它的所有类型
  • 读取属性
简而言之,通过反射,您可以将任何.NET代码反编译为C#/VB或任何其他IL语言

我建议您看看telerik的反编译器(这是一个可以查看dll源代码的工具)。然后你就知道反射是什么了


Alo,这里有一些文档可以帮助您开始:

“请向我重复文档的大部分内容。我懒得阅读文档,但我保证,如果您复制/粘贴它,我不会懒得阅读它。”我敦促您不要作为初学者阅读反射,它的“力量”可能会鼓励你们在应该应用语言核心概念的领域使用它。我看到“初学者”和“反思”有六个词。这不是好兆头……”请向我重复文档的大部分内容。我懒得阅读文档,但我保证,如果你复制/粘贴它,我不会懒得阅读。我敦促你不要作为初学者阅读反射,它的“力量”可能会鼓励你们在应该应用语言核心概念的领域使用它。我看到“初学者”和“反思”有六个词。这不是好兆头…我编辑了我的问题。你能详细解释一下这些问题吗?我不理解错了,但是已经有很多关于反思的文章了。你能解释一下你为什么需要它吗?我这样问是因为反射非常昂贵,如果有一个内置的.NET解决方案,可能会更快。我会给你你需要的解释,但我只是想避免使用需要不必要资源的代码。我编写了一个名为Reader的类。我使用switch case来选择文件扩展名。由于有很多文件类型,我的导师建议我使用反射而不是switch case。我开始阅读有关反射的内容,并陷入了动态加载程序集文件的困境。所以你能给我解释一下如何使用反射而不是开关盒吗?但是我在网上浏览了一下,看到了StackOverflow上的这篇文章。这是一个讨论,看看什么是更快的切换或反射。切换总是会更快,但也许阅读这篇文章是个好主意。如果您还有任何问题,请随时回来。谢谢您的帮助:)我编辑了我的问题。你能详细解释一下这些问题吗?我不理解错了,但是已经有很多关于反思的文章了。你能解释一下你为什么需要它吗?我这样问是因为反射非常昂贵,如果有一个内置的.NET解决方案,可能会更快。我会给你你需要的解释,但我只是想避免使用需要不必要资源的代码。我编写了一个名为Reader的类。我使用switch case来选择文件扩展名。由于有很多文件类型,我的导师建议我使用反射而不是switch case。我开始阅读有关反射的内容,并陷入了动态加载程序集文件的困境。所以你能给我解释一下如何使用反射而不是开关盒吗?但是我在网上浏览了一下,看到了StackOverflow上的这篇文章。这是一个讨论,看看什么是更快的切换或反射。切换总是会更快,但也许阅读这篇文章是个好主意。如果您还有任何问题,请随时回来。谢谢您的帮助:)