C# 中的元组定义
Tuple definition in c#
我正在尝试定义一个 Tuple <int, Tuple <int, int>>
类型。我所拥有的是一个名为 Tile
的 class,我在其中定义了一些这样的参数:
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 告诉我 TId
和 Id
:
There is no argument given that corresponds to the required formal parameter 'item1' of 'Tuple< int, Tuple< int, int>>.Tuple(int, Tuple<int, int>)
'.
我不完全明白这里发生了什么。我必须以不同的方式定义这种类型吗?感谢您的帮助!
您的代码很快就会变得混乱,看起来一团糟。您最好在 类 Id
和 TId
中定义属性,而不是从元组继承...
如果你真的想用元组的方式,你需要提供参数来初始化你的数据:
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))
{
}
}
}
您的 class 继承自没有无参数构造函数的对象:
public class Id : Tuple<int, Tuple<int, int>>
{
}
但是您没有为继承的 class 定义构造函数。编译器错误告诉您默认的无参数构造函数没有向基础 class' 构造函数提供必要的参数。
使用这些参数定义构造函数:
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)) { }
}
据我了解您的问题,您不想将 Id
和 TId
作为内部 class,而是作为一个字段。
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;
}
另请注意,您在问题中使用了混合词汇。请查看 at this MSDN entry 对不同 class 成员的解释。
如果您想让成员作为 参数,而不是 字段,它看起来如下:
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; }
}
我正在尝试定义一个 Tuple <int, Tuple <int, int>>
类型。我所拥有的是一个名为 Tile
的 class,我在其中定义了一些这样的参数:
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 告诉我 TId
和 Id
:
There is no argument given that corresponds to the required formal parameter 'item1' of '
Tuple< int, Tuple< int, int>>.Tuple(int, Tuple<int, int>)
'.
我不完全明白这里发生了什么。我必须以不同的方式定义这种类型吗?感谢您的帮助!
您的代码很快就会变得混乱,看起来一团糟。您最好在 类 Id
和 TId
中定义属性,而不是从元组继承...
如果你真的想用元组的方式,你需要提供参数来初始化你的数据:
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))
{
}
}
}
您的 class 继承自没有无参数构造函数的对象:
public class Id : Tuple<int, Tuple<int, int>>
{
}
但是您没有为继承的 class 定义构造函数。编译器错误告诉您默认的无参数构造函数没有向基础 class' 构造函数提供必要的参数。
使用这些参数定义构造函数:
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)) { }
}
据我了解您的问题,您不想将 Id
和 TId
作为内部 class,而是作为一个字段。
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;
}
另请注意,您在问题中使用了混合词汇。请查看 at this MSDN entry 对不同 class 成员的解释。
如果您想让成员作为 参数,而不是 字段,它看起来如下:
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; }
}