如何制作泛型平均方法,以便可以在其中输入任何类型?

问题描述 投票:0回答:2

我尝试制定通用平均方法。使该方法可以与任何类型进行交互。但是any类型的值也必须是通用的。这样您就可以拥有以下类型:int,float,decimal。

我这样尝试:

public class Calculator<T>
    {
        public T Average(List<T>items, Func<T, T>  getValue )
        {

            T sum = 0 ;

            foreach (var item in items)
            {
                sum += getValue(item);
            }

            return (T) Convert.ChangeType(sum / items.Count(), typeof(T));
        }
    }
}

而且我有一个这样的示例类:

public  class Product<T>
    {

        public T Weight { get; set; }

    }

但是我已经在这行上得到一个错误:

   T sum = 0 ;

无法将类型'int'隐式转换为'T'

和程序类:


            var listProducts = new List<Product<int>> { 
                    new Product<int>{ Weight = 1},
                    new Product<int> { Weight = 2},
                    new Product<int> { Weight = 87}
            };
            var calc2 = new Calculator<Product<int>>();
            var averageWeight = calc2.Average(listProducts, p => p.Weight);

            Console.WriteLine($"Average weight is: {averageWeight}" );
c# generics delegates
2个回答
1
投票

尝试使用

T sum = default(T);

如果仅使用值类型,例如,通用类型约束也很有意义

where T : struct

1
投票

无法将类型'int'隐式转换为'T'

这意味着T是泛型类型,它可以是从字符串到int的任何类型,也可以是您不能分配0的其他类型(它是int类型)。

尝试替换

T sum = 0;

with

T sum = default(T);
© www.soinside.com 2019 - 2024. All rights reserved.