【问题标题】:How do you sum only the integer elements in a list of objects in C# with a loop? [duplicate]如何使用循环仅对 C# 中的对象列表中的整数元素求和? [复制]
【发布时间】:2020-08-12 00:15:58
【问题描述】:

考虑以下几点:

static void Main(string[] args)
        {
            List<object> someList = new List<object>();
            someList.Add(1); 
            someList.Add(2); 
            someList.Add("apple"); 
            someList.Add(true);
            someList.Add(3);
        }

列表项未定义数据类型,包含布尔值、字符串和整数。假设有更多不同数据类型的列表项,我如何使用简单的循环或 if 语句仅对对象列表中的整数(例如 1、2 和 3)求和?我刚开始接触 C#,谢谢!

搜索后,我尝试过这样的事情,但没有成功:

            if(!someList.Contains(int))
                List.Add(int);

【问题讨论】:

  • long.MaxValue 会算作整数吗? 16m(即包含整数值的 decimal 类型)会计数吗?
  • 出于好奇,这种列表的实际应用是什么?
  • 这是一道课堂作业。我不确定该应用程序,但话说回来,我对编程很陌生。
  • 家庭作业问题的人为性质使得它们几乎不可能很好地回答,尤其是当问题的作者未能提供任何可以解释什么是好的答案的上下文时。 List&lt;object&gt; 是一种实际上无用的对象;如果坚持使用它,那么任何应该只应用于特定类型成员的操作都可以使用OfType() 方法完成。查看副本。

标签: c# list object integer type-inference


【解决方案1】:

如果您知道它们已装箱int,您可以使用OfTypeSum

var result = someList.OfType<int>().Sum();

或者对于将转换为字符串表示的int 表示的任何内容,您可以将SumToStringint.TryParse 一起使用

var result = someList.Sum(x => int.TryParse(x.ToString(), out var value) ? value : 0);

或者如果你喜欢循环

var result = 0;
foreach (var value in someList.OfType<int>())
   result += value;

// or 

var result = 0;
foreach (var item in someList)
   if (int.TryParse(item.ToString(), out var value))
      result += value;

其他资源

Enumerable.OfType(IEnumerable) Method

根据指定类型过滤 IEnumerable 的元素。

Enumerable.Sum Method

计算数值序列的总和。

Int32.TryParse Method

将数字的字符串表示形式转换为其 32 位有符号 整数等效。一个返回值表示是否操作 成功了。

【讨论】:

    猜你喜欢
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多