C# 优化此代码并使其更具动态性

C# 优化此代码并使其更具动态性,c#,asp.net,optimization,C#,Asp.net,Optimization,是否有一种方法可以优化此代码并在web.config设置上进行此扩展,以便我可以从中进行阅读,并且将来如果需要添加或删除,我应该能够轻松地进行 if (fileExt.ToLower() == ".rtf" || fileExt.ToLower() == ".xls" || fileExt.ToLower() == ".doc" || fileExt.ToLower(

是否有一种方法可以优化此代码并在web.config设置上进行此扩展,以便我可以从中进行阅读,并且将来如果需要添加或删除,我应该能够轻松地进行

  if (fileExt.ToLower() == ".rtf" || 
                    fileExt.ToLower() == ".xls" || 
                    fileExt.ToLower() == ".doc" || 
                    fileExt.ToLower() == ".png" || 
                    fileExt.ToLower() == ".gif" || 
                    fileExt.ToLower() == ".txt" || 
                    fileExt.ToLower() == ".jpg" || 
                    fileExt.ToLower() == ".pdf" || 
                    fileExt.ToLower() == ".htm" || 
                    fileExt.ToLower() == ".html" ||
                    fileExt.ToLower() == ".rar" || 
                    fileExt.ToLower() == ".zip")
                 {
您可以使用列表:

string[] yourarray = { ".rtf", ".xls",".doc",".png",".gif",".txt",
                         ".jpg",".pdf",".htm",".html",".rar",".zip" };

var foundedString = Array.Find(yourarray, str => str.ToLower().Equals(fileExt));

if (foundedString == null)
{
    //Not Found
}
else
{
    //Code here
}
您可以使用列表:

string[] yourarray = { ".rtf", ".xls",".doc",".png",".gif",".txt",
                         ".jpg",".pdf",".htm",".html",".rar",".zip" };

var foundedString = Array.Find(yourarray, str => str.ToLower().Equals(fileExt));

if (foundedString == null)
{
    //Not Found
}
else
{
    //Code here
}

如果您想使用web.config,我建议您使用自定义配置部分。通过这种方式,您可以枚举返回的强类型结果。下面的链接

您可以使用哈希表存储值,只需在其中进行搜索,它将比数组或列表更快。代码看起来像这样

在下面的伪E代码中,您必须检查变量是否在哈希表中

  Hashtable fileExtsions = new Hashtable();
if (fileExtensions[extensionOfFileInquestion])
{
do some code
}
因此,您所要做的就是检查文件的扩展名是否在哈希表中。这将限制if语句,并且比数组更快。您可以使用自定义配置节enumerable填充哈希表

缺点是哈希表比数组字符串占用更多内存,但最终您可能会更高兴


如果您想使用web.config,我建议您使用自定义配置部分。通过这种方式,您可以枚举返回的强类型结果。下面的链接

您可以使用哈希表存储值,只需在其中进行搜索,它将比数组或列表更快。代码看起来像这样

在下面的伪E代码中,您必须检查变量是否在哈希表中

  Hashtable fileExtsions = new Hashtable();
if (fileExtensions[extensionOfFileInquestion])
{
do some code
}
因此,您所要做的就是检查文件的扩展名是否在哈希表中。这将限制if语句,并且比数组更快。您可以使用自定义配置节enumerable填充哈希表

缺点是哈希表比数组字符串占用更多内存,但最终您可能会更高兴

所有
IEnumerable
都有扩展方法
包含(字符串值)
。在我的示例中,您可以使用任意
IEnumerable
而不是
string[]

所有
IEnumerable
都有扩展方法
包含(字符串值)
。在我的示例中,您可以使用任意
IEnumerable
而不是
string[]

在web.config中

<appSettings>
  <add key="ValidExtensions" value="rtf,xls,doc,png,gif,txt,jpg,pdf" />
</appSettings>
在您的web.config中

<appSettings>
  <add key="ValidExtensions" value="rtf,xls,doc,png,gif,txt,jpg,pdf" />
</appSettings>
Contains
是一个
Linq
扩展。如果性能是一个问题,您可以使用
字典及其
ContainsKey
,它将执行哈希查找而不是迭代


Contains
是一个
Linq
扩展。如果性能是一个问题,你可以使用
字典及其
ContainsKey
,它将进行哈希查找而不是迭代。

你能自己做这些吗?是的,我能做,只是想看看别人有什么想法。你能自己做吗?是的,我能做,只是想看看别人有什么想法你是说“数组”,不是“名单”,对吗?我看不到任何列表。你的意思是“数组”,而不是“列表”,对吗?我在这里没有看到任何列表。哇,StackOverflow在VB.NET上的语法突出显示做得很好,你不觉得吗?没什么大不了的,但你可能想使用不同的分隔符;在文件名中不是有效字符的字符,如“|”。以防某个疯子真的想要一个带逗号的文件扩展名
(我想,除非你是在Mono上运行,否则所有的赌注都没有!)如果有问题的文件是由用户上传的,那么在Windows下非法的文件名就会成为一个值得关注的问题。我的ASP.NET代码崩溃了,因为一个Mac用户上传了一个名称中带有冒号的文件,我试图将该文件保存到同一个文件名。哇,StackOverflow在VB.NET上的语法高亮显示做得很好,你不觉得吗?没什么大不了的,但你可能想使用不同的分隔符;在文件名中不是有效字符的字符,如“|”。以防某个疯子真的想要一个带逗号的文件扩展名
(我想,除非你是在Mono上运行,否则所有的赌注都没有!)如果有问题的文件是由用户上传的,那么在Windows下非法的文件名就会成为一个值得关注的问题。我的ASP.NET代码崩溃是因为一个Mac用户上传了一个名称中带有冒号的文件,我试图将该文件保存到相同的文件名。