Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对同构列表求和_C#_List_Sum_Type Conversion_Numbers - Fatal编程技术网

C# 对同构列表求和

C# 对同构列表求和,c#,list,sum,type-conversion,numbers,C#,List,Sum,Type Conversion,Numbers,我正在开发一个C应用程序。我有多个对象列表,即每个列表包含不同类型的值,如double、int等,以列表中对象的形式存储。每个列表都包含相同类型的对象 List<object> l1 = {1,2,3,4,5,6}; List<object> l2 = {1.1, 2.1, 3.2, 4.2, 5.6, 6.1, 7.5, 8.6, 9.2}; 这给了我对象的类型。现在我必须将列表中的所有值转换为这种类型。目前,我正在尝试: dynamic sum = null; T

我正在开发一个C应用程序。我有多个对象列表,即每个列表包含不同类型的值,如double、int等,以列表中对象的形式存储。每个列表都包含相同类型的对象

List<object> l1 = {1,2,3,4,5,6};

List<object> l2 = {1.1, 2.1, 3.2, 4.2, 5.6, 6.1, 7.5, 8.6, 9.2};
这给了我对象的类型。现在我必须将列表中的所有值转换为这种类型。目前,我正在尝试:

dynamic sum = null;
Type typeOfCurrentField = null;
for(int i = 0; i < l1.Count; i++)
{
    if (typeOfCurrentField == null)
    {
        typeOfCurrentField = l1[i].GetType();
        sum = Convert.ChangeType(l1[i], typeOfCurrentField);
    }
    else
    {
        sum = sum + Convert.ChangeType(l1[i], typeOfCurrentField);;
    }
    
}
如何克服这个问题?

动态和=0; l1.Cast中的foreach变量v 总和+=v; 动态和=0; l1.Cast中的foreach变量v 总和+=v;
是否总是存储数值?列表中的所有项目都将具有相同的类型?是的,值将是数字,并且单个列表将具有相同类型@dbvega的所有值。在这种情况下,您不需要检查类型来计算总和。我会发布一个答案,看看。如果可以避免的话,请不要使用动态。您可以使用反射动态调用Enumerable.Cast,然后再调用Enumerable.Sum,但最终结果仍然是必须强制转换为某个静态类型的对象。或者看看Jon Skeets,但您仍然需要反射和MakeGenericMethodar始终存储数值?列表中的所有项目都将具有相同的类型?是的,值将是数字,并且单个列表将具有相同类型@dbvega的所有值。在这种情况下,您不需要检查类型来计算总和。我会发布一个答案,看看。如果可以避免的话,请不要使用动态。您可以使用反射动态调用Enumerable.Cast,然后再调用Enumerable.Sum,但最终结果仍然是必须强制转换为某个静态类型的对象。或者检查Jon Skeets,但仍然需要反射和MakeGenericMethod这会导致var list=new list{1,2.1f,3.2d,4.2m}出现异常@我问了奥利维耶罗吉尔,用户确认列表中的所有项目都是相同的类型。检查顶部的问题。变化不大:l1.Cast.ToList.ForEachv=>sum+=v@OlivierRogier我想把它写清楚。。这里是另一个l1.Cast.Aggregatea,b=>a+b@在本例中,Waleed Naveed动态告诉编译器变量的类型在运行时之前是未知的。这会导致var list=new list{1,2.1f,3.2d,4.2m};出现异常@我问了奥利维耶罗吉尔,用户确认列表中的所有项目都是相同的类型。检查顶部的问题。变化不大:l1.Cast.ToList.ForEachv=>sum+=v@OlivierRogier我想把它写清楚。。这里是另一个l1.Cast.Aggregatea,b=>a+b@在本例中,Waleed Naveed动态告诉编译器变量的类型在运行时之前是未知的。
dynamic sum = null;
Type typeOfCurrentField = null;
for(int i = 0; i < l1.Count; i++)
{
    if (typeOfCurrentField == null)
    {
        typeOfCurrentField = l1[i].GetType();
        sum = Convert.ChangeType(l1[i], typeOfCurrentField);
    }
    else
    {
        sum = sum + Convert.ChangeType(l1[i], typeOfCurrentField);;
    }
    
}
Operator '+' cannot be applied to operands of type 'double' and 'object' Exception of type ==> Microsoft.CSharp.RuntimeBinder.RuntimeBinderException