类对象数组的构造方法

时间:2015-01-02 17:22:16

标签: c# arrays constructor

在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

2 个答案:

答案 0 :(得分:6)

通常的方式:

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" };

现在,这是否好看取决于你自己决定。我还要考虑卡类是否应该使用字符串。枚举可能更好,并且它可能会保存一些验证和解析。

答案 1 :(得分:4)

隐式投射可能是解决方案,但我建议通过提供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") };