C# 在类构造函数C中传递可变数量的参数#

C# 在类构造函数C中传递可变数量的参数#,c#,parameters,params,C#,Parameters,Params,我有一个类EvoObject.cs,它的构造函数定义为: public class EvoObject { private Object _id; private List<List<Int32>> _attributes; public EvoObject(Object _id, params List<Int32> _args) { List<Int32> _attrib = new List&

我有一个类
EvoObject.cs
,它的构造函数定义为:

public class EvoObject
{
    private Object _id;
    private List<List<Int32>> _attributes;

    public EvoObject(Object _id, params List<Int32> _args)
    {
        List<Int32> _attrib = new List<int>();

        Debug.Assert(_args.Count >= 2, "Invalid attributes!");

        this._id = _id;
        _attributes = new List<List<Int32>>(_args.Count);

        for (int _i = 0; _i < _args.Count; _i++)
        {
            _attrib.Add(_args[_i]);
        }

        _attributes.Add(_attrib);
    }
}  
我想说的是

  • \u作者
    具有
    对象id
  • \u合著者
    \u论文
    \u场馆
    参数列表
在类的构造函数中,
EvoObject.cs
\u合著者
\u论文
\u场地
:所有都是类型的列表
列表

我在第行遇到错误:

return new EvoObject(_author, _coAuthors, _papers, _venues);  
i、 e.
EvoObject不包含接受4个参数的构造函数


params
在这里有什么用处

我认为您在方法签名中缺少列表声明中的[],以便将其声明为参数数组


试试
public EvoObject(Object\u id,params List[]\u args)

params
关键字需要一个一维数组,你不能使用
List
。我更关心的是
List
到底是如何告诉你哪些标识符用于什么东西(论文、场地等)。这些信息真的不重要吗?当不知道这些整数代表什么时,它们又有什么用呢?似乎一些合理的数据结构可以解决这里的许多问题,包括所问的问题。@David the structure
List@Taufel字体好吧,如果它对你有用的话,我想就用它吧。然而,经验告诉我们一个完全不同的故事。考虑一个关于这个主题的名言…“聪明的数据结构和愚蠢的代码比另一种方式好得多。”。Raymond@David:好吧,如果你抓住了我想要实现的想法,你也可以建议你的方法,你的礼貌@DavidY——但是根据您的建议进行更改,我在语句中遇到了另一个错误,即
\u attrib.Add(\u args[\u I])。错误是@DavidY“has some invalid arguments”--通过声明为
List[]\u args
\u args
将是
列表
数组
?@Taufel
\u args
将是列表数组。在这种情况下,我认为您需要
\u attributes.Add(\u args[\u I])
@DStanley很好,那么我在上面评论的后续错误呢?@Taufel
\u args[\u I]
是一个
列表
将其添加到
列表中应该没有问题。
return new EvoObject(_author, _coAuthors, _papers, _venues);