类对象数组的构造函数

本文关键字:构造函数 数组 对象 | 更新日期: 2023-09-27 18:35:52

在 C# 中,可以键入:

int[] ia = new int[] { 1, 2, 3, 4 };

它将初始化一个长度为 4 的整数数组,其中包含这些数字。

我有一张职业卡牌,

代表一副牌中的一张卡牌,我希望能够说出这样的话:

Card[] ca = new Card[] { "4S", "5C", "AH" };

并有一系列卡牌,第一张牌是黑桃的4张,然后是俱乐部的5张,然后是红心王牌。

我已经可以做到:

Card c = new Card("4S");

并有一张代表黑桃4的卡片。

这种构造函数类型甚至可能吗?如果可能,我将如何创建它?


PS:我知道我可以去

Card[] ca = Cards.Parse("4S 5C AH");

或者像这样蹩脚的东西,但我希望我能避免这种情况,并使用更漂亮的语法。

现在我已经把这些都打出来了,我觉得有点怯懦。我现在是"那个人"... #Guilty

类对象数组的构造函数

通常的方式:

var ca = new Card[] { new Card( "4S" ), new Card( "5C" ), new Card( "AH" ) };

显式投射:

class Card
{
    ...
    public static explicit operator Card( string s )
    {
        return new Card( s );
    }
    ...
}
var ca = new Card[] { (Card)"4S", (Card)"5C", (Card)"AH" };

隐式演员表:

class Card
{
    ...
    public static implicit operator Card( string s )
    {
        return new Card( s );
    }
    ...
}
var ca = new Card[] { "4S", "5C", "AH" };

现在,这是否好由您决定。我还会考虑卡片类是否应该使用字符串。枚举可能更好,并且可能会节省一些验证和解析。

式强制转换可能是解决此问题的方法,但我建议通过提供 ctors 来干净的方式执行此操作:

var ca = new Card[] { new Card("4S"), new Card("5C"), new Card("AH") };

这种方法有问题吗?

一种更短的方法是让编译器找出类型:

var ca = new [] { new Card("4S"), new Card("5C"), new Card("AH") };