【问题标题】:Total characters in List c#List c#中的总字符数
【发布时间】:2018-01-30 09:45:52
【问题描述】:

我想统计列表中的所有字符,看看我是否超过 MaxJsonLength 的最大值。

这是我的控制器,我有一个产品列表。

 public JsonResult GetAllProducts()
    {
        List<ProductNew> allProducts = new List<ProductNew>();

        var shopIdOfTheDay = 2;

        allProducts = _db.Products
                .Where(p => p.Category.ShopId == shopIdOfTheDay && p.Availability)
                .OrderBy(p => p.Description)
                .ToList();

       //count the characters in the list here
        int total = 0;

        foreach (var value in allProducts)
        {

            string s = value.ToString();
            int i;
            i = s.Length;
            total = total += i;
            Console.WriteLine(total);
        }

        return new JsonResult { Data = allProducts, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    }

但是 foreach 循环不起作用,因为每个字符串值都是 109 个字符长,而且这是不对的。

如果我打破value.ToString 看到该值为+

{System.Data.Entity.DynamicProxies.ProductNew_7F6B12BDD7841029155EF84C6372688579A97D5AA4EA2378712AC64A67B25290} SeashellBrawlCorvee.Models.ProductNew {System.Data.Entity.DynamicProxies.ProductNew_7F6B12BDD7841029155EF84C6372688579A97D5AA4EA2378712AC64A67B25290}

所以这是不对的。 value 中有多个值,所以我为什么不能将它转换为 String?

我尝试做一个额外的 foreach。喜欢:

    foreach (var value2 in value) {
       string s1 = value2.ToString();
            int i1;
            i1 = s2.Length;
            total = total += i1;
            Console.WriteLine(total);
     }

类似这样的东西,但那不起作用,因为我收到一个错误:foreach statement cannot operate on vairables of type 'PRoductNew'because 'ProductNew' does not contain a public definition for 'GetEnumerator'

那该怎么办?

【问题讨论】:

  • 断点这一行 value.ToString(),你会明白为什么它是一个恒定的长度,这可能不是你想象的那样
  • 为什么你首先检查MaxJsonLength?如果你真的想返回超过 4MB 的数据,只需增加该值即可。如果要限制发回的数据量,请在数据库级别使用基于记录数的分页。从数据库中加载 100K 行并丢弃其中的 90K 并没有多大意义。
  • 您有一个ProductNew 对象列表。你认为在ProductNew 的实例上调用ToString() 会产生什么结果?你为什么这么想?你有没有付出任何努力来实际单步执行代码并查看ToString() 方法实际返回的内容?
  • 感谢您的回复。在我完成一半之前,我不小心发布了我的任务。我刚刚更新了它。
  • 无论如何这是一个 X Y 类问题 meta.stackexchange.com/questions/66377/what-is-the-xy-problem ,你正在用错误的解决方案解决错误的问题。

标签: c# list count character


【解决方案1】:

检查string s = value.ToString();s的内容可能不是你想要的结果。
因为value是一个来自ProductNew类的类,所以你不能通过.ToString()方法获取内容。如果要统计所有字符,则应统计类中属性的每个内容,如下所示:

foreach (var value in allProducts)
        {
            string ID = value.ID.ToString();
            string Category = value.Category.ToString();
            string Description = value.Description.ToString();

            total += (ID.Length + Category.Length + Description.Length);
            Console.WriteLine(total);
        }

【讨论】:

  • 真为你高兴 :) 作为@PanagiotisKanavos 的建议,我向你推荐这个 javascript 包:select2.org希望它可以帮助你
  • 谢谢!感谢@PanagiotisKanavos,无论如何我都会正确地重写我的代码,但你为我的问题提供了解决方案:) 感谢你的推荐,我会检查一下。
猜你喜欢
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
相关资源
最近更新 更多