C# 打包要传递给方法的对象

C# 打包要传递给方法的对象,c#,C#,在项目中,有多个山羊对象的实例,其创建方式如下: Goat nubian = GetProductionStatistics(nubian); Goat alpine = GetProductionStatistics(alpine); Goat saanen = GetProductionStatistics(saanen); 一旦创建,这些将传递给另一个方法,如下所示: CalculateProductionPotential(nubian, alpine, saanen); 考虑到将来

在项目中,有多个山羊对象的实例,其创建方式如下:

Goat nubian = GetProductionStatistics(nubian);
Goat alpine = GetProductionStatistics(alpine);
Goat saanen = GetProductionStatistics(saanen);
一旦创建,这些将传递给另一个方法,如下所示:

CalculateProductionPotential(nubian, alpine, saanen);

考虑到将来会添加更多种类的山羊,我想将山羊对象“打包”成一个东西,我们称之为
allgoes
,它可以传递给将其作为参数的方法:
CalculateProductionPotential(allgoes)
。这将消除每次修改方法签名的情况。如何实现这一点?

您的代码令人困惑,因为您正在将goat对象传递给创建它的工厂。假设你真的想传递一个字符串或其他东西…下面是如何做到这一点:

class Program
{
    static void Main(string[] args)
    {
        var goats = new List<Goat>
        {
            {GetProductionStatistics("nubian") },
            {GetProductionStatistics("alpine") },
            {GetProductionStatistics("saanen") } 
        };

        CalculateProductionPotential(goats);
    }

    private static void CalculateProductionPotential(List<Goat> goats)
    {
        foreach (var goat in goats)
        {
            // Process here
        }

    }

    private static Goat GetProductionStatistics(string type)
    {
        var goat = new Goat(); 

        // Some processing... 
        return goat; 
    }
}
类程序
{
静态void Main(字符串[]参数)
{
var=新列表
{
{GetProductionStatistics(“努比亚”)},
{GetProductionStatistics(“阿尔卑斯”)},
{GetProductionStatistics(“saanen”)}
};
计算生产潜力(山羊);
}
私有静态void计算生产潜力(列表)
{
foreach(山羊中的山羊)
{
//在这里处理
}
}
私有静态产品统计(字符串类型)
{
var山羊=新山羊();
//一些处理。。。
返回山羊;
}
}

创建一个
列表
,将元素添加到此列表并传递它?您所描述的是一个集合。没错,在
CalculateProductionPotential
中,有一个特定于努比亚品种的逻辑。如何隔离属于努比亚人的列表项以应用该逻辑?您的山羊类应该具有指示山羊类型的属性。所以如果(goat.Type==“努比亚”)。。。在现实世界中,可能会有一个枚举而不是字符串,但这说明了这一点。