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

时间:2010-09-21 20:11:59

标签: c# asp.net optimization

是否有一种方法可以优化此代码并在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")
                 {

5 个答案:

答案 0 :(得分:1)

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

custom configuration sections

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

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

  Hashtable fileExtsions = new Hashtable();
if (fileExtensions[extensionOfFileInquestion])
{
do some code
}

所以你要做的就是检查文件的扩展名是否在哈希表中。这将限制你的if语句,并且比数组更快。您可以使用可枚举的自定义配置部分填充哈希表。

缺点是散列表会占用更多内存然后是数组字符串,但最后你可能会更开心

hash tables

答案 1 :(得分:0)

您可以使用list:

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
}

答案 2 :(得分:0)

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

if (extensions.Contains(fileExt.ToLower())){
}

所有IEnumerable<string>都有扩展方法Contains(string value)。您可以在我的示例中使用任何IEnumerable<string>代替string[]

答案 3 :(得分:0)

在你的web.config中......

<appSettings>
  <add key="ValidExtensions" value="rtf,xls,doc,png,gif,txt,jpg,pdf" />
</appSettings>

在你的代码隐藏......

fileExt = fileExt.ToLower().TrimStart(".")

Dim ConfigSetting As String = ConfigurationManager.AppSettings("ValidExtensions")
Dim Extensions As String() = ConfigSetting.Split(",")
Dim IsValid As Boolean = (Array.IndexOf(Extensions, fileExt) >= 0)

If IsValid Then
    'Yada, yada, yada
Else
    'Error
End If

答案 4 :(得分:0)

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


    if(yourarray.Contains(fileExt, StringComparer.OrdinalIgnoreCase))
    {
        //
    }

ContainsLinq扩展名。如果性能受到关注,您可以使用Dictionary及其ContainsKey,它将执行哈希查找而不是迭代。