繁体   English   中英

c#中的元组定义

[英]Tuple definition in c#

我正在尝试定义一个类型为Tuple <int, Tuple <int, int>> 我有一个名为Tile的类,我在其中定义了一些这样的参数:

public class Tile
{
    public readonly int producerId;
    public readonly int level;
    public class Id : Tuple<int, Tuple<int, int>>
    {
    }
    public class TId : Tuple<int, Tuple<int, int>>
    {
    }
}

问题是VS告诉我这个TIdId

没有给出的参数对应于' Tuple< int, Tuple< int, int>>.Tuple(int, Tuple<int, int>)所需的形式参数'item1'.Tuple Tuple< int, Tuple< int, int>>.Tuple(int, Tuple<int, int>) '。

我不完全明白这里发生了什么。 我是否必须以不同的方式定义此类型? 谢谢您的帮助!

您的代码会立即变得混乱,看起来像一团糟。 您最好在类IdTId定义属性,而不是继承自元组...

如果你真的想采用元组方式,你需要提供参数来初始化你的数据:

public class Tile
{
    public readonly int producerId;
    public readonly int level;
    public class Id : Tuple<int, Tuple<int, int>>
    {
        public Id(int value1, int subvalue1, int subvalue2)
            : base(value1, new Tuple<int, int>(subvalue1, subvalue2))
        {
        }
    }
    public class TId : Tuple<int, Tuple<int, int>>
    {
        public TId(int value1, int subvalue1, int subvalue2)
            : base(value1, new Tuple<int, int>(subvalue1, subvalue2))
        {
        }
    }
}

您的类继承自没有无参数构造函数的类:

public class Id : Tuple<int, Tuple<int, int>>
{
}

但是您没有为继承的类定义构造函数。 编译器错误告诉您默认的无参数构造函数没有向基类的构造函数提供必要的参数。

使用这些参数定义构造函数:

public class Id : Tuple<int, Tuple<int, int>>
{
    public Id(int first, Tuple<int, int> second) : base(first, second) { }
}

或者,如果您想要无参数的,请定义默认参数:

public class Id : Tuple<int, Tuple<int, int>>
{
    public Id() : base(0, new Tuple<int, int>(0, 0)) { }
}

据我了解你的问题,你不希望将IdTId作为内部类,而是作为一个字段。

public class Tile
{
    public readonly int producerId;
    public readonly int level;
    public Tuple<int, Tuple<int, int>> Id;
    public Tuple<int, Tuple<int, int>> TId;
}

另请注意,您在问题中使用了混合词汇。 请查看此MSDN条目,解释不同的班级成员。

如果您希望将成员作为参数而不是字段 ,则会显示以下内容:

public class Tile
{
    public readonly int ProducerId { get; set; }
    public readonly int Level { get; set; }
    public Tuple<int, Tuple<int, int>> Id { get; set; }
    public Tuple<int, Tuple<int, int>> TId { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM