【问题标题】:Can this little code be optimised? [closed]这个小代码可以优化吗? [关闭]
【发布时间】:2012-07-02 02:45:21
【问题描述】:

这很简单。

List<string> stringArr = new List<string>();
foreach (var item in db.IconTags)
{
    stringArr.Add(item.Tag);
}
string outPut = string.Join(",", stringArr);

我希望可以这样说:

string outPut = string.Join(",", db.IconTags.Select(t => t.Tag).ToTArray());

也许是的

string outPut = string.Join(",", db.IconTags, t => t.Tag);

难道你不能做一些很酷的事情吗?我可以制作自己的方法,但我希望有一些内置的东西。

【问题讨论】:

    标签: c# entity-framework optimization


    【解决方案1】:

    在 .NET 4 或更高版本中,您可以这样写:

    string output = string.Join(",", db.IconTags.Select(t => t.Tag));
    

    在 .NET 3.5 中,您需要添加对 ToArray 的调用:

    string output = string.Join(",", db.IconTags.Select(t => t.Tag).ToArray());
    

    【讨论】:

    • 我试过了!不知道为什么我认为我不可能谢谢伙计:)
    【解决方案2】:

    是的,你可以这样做。

    如果您的目标是您的第一个代码可以工作的框架版本,那么您的第一个愿望也可以工作。它甚至可以在没有.ToArray() 的情况下工作,因为String.Join 方法需要IEnumerable&lt;string&gt;

    在框架 3.5 中,您需要 .ToArray(),但在框架 3.5 中,您的第一个代码也不起作用。

    【讨论】:

      【解决方案3】:

      如果您想减少对象实例化/lambda 函数的数量,您也可以这样做

      StringBuilder builder = new StringBuilder();
      for(var item in db.IconTags) {
          builder.Append(item.Tag).Append(",");
      }
      // We have one extraneous , so remove it
      if(builder.Length > 1) {
          builder.Remove(builder.Length - 1, 1);
      }
      String output = builder.ToString();
      

      【讨论】:

        【解决方案4】:

        根据您的替代方案,我认为优化意味着更少的代码行数,而不是更高效的计算。

        您的第二种选择应该使用 Linq:

        string.Join(",", db.IconTags.Select(iconTag => iconTag.Tag).ToArray());
        

        更新:正如其他人所说,ToArray 可以在 .NET 4 及更高版本中删除。

        【讨论】:

          猜你喜欢
          • 2012-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-11
          • 2018-04-13
          • 1970-01-01
          相关资源
          最近更新 更多