在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
答案 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") };