class 对象数组的构造函数
Constructor for an array of class objects
在 C# 中,您可以键入:
int[] ia = new int[] { 1, 2, 3, 4 };
然后它将初始化一个长度为 4 的整数数组,其中包含这些数字。
我有一张 class 卡片,代表一副卡片中的一张卡片,我希望能够这样说:
Card[] ca = new Card[] { "4S", "5C", "AH" };
还有一系列的牌,第一张牌是黑桃 4,然后是梅花 5,然后是红桃 A。
我已经可以做到了:
Card c = new Card("4S");
并且有一张代表黑桃 4 的牌。
这种构造函数类型甚至可能吗?如果可能,我将如何创建它?
PS:我知道我可以去:
Card[] ca = Cards.Parse("4S 5C AH");
或者类似的蹩脚的东西,但我希望我能避免这种情况,并使用更漂亮的语法。
现在我已经把这些都打出来了,我觉得有点不好意思。我现在 "that guy"... #Guilty
隐式转换可能是解决此问题的方法,但我建议通过提供 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") };
通常的方式:
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" };
现在,这是否美好由您决定。我还会考虑卡片 class 是否应该使用字符串。枚举可能更好,并且可能会节省一些验证和解析。
在 C# 中,您可以键入:
int[] ia = new int[] { 1, 2, 3, 4 };
然后它将初始化一个长度为 4 的整数数组,其中包含这些数字。
我有一张 class 卡片,代表一副卡片中的一张卡片,我希望能够这样说:
Card[] ca = new Card[] { "4S", "5C", "AH" };
还有一系列的牌,第一张牌是黑桃 4,然后是梅花 5,然后是红桃 A。
我已经可以做到了:
Card c = new Card("4S");
并且有一张代表黑桃 4 的牌。
这种构造函数类型甚至可能吗?如果可能,我将如何创建它?
PS:我知道我可以去:
Card[] ca = Cards.Parse("4S 5C AH");
或者类似的蹩脚的东西,但我希望我能避免这种情况,并使用更漂亮的语法。
现在我已经把这些都打出来了,我觉得有点不好意思。我现在 "that guy"... #Guilty
隐式转换可能是解决此问题的方法,但我建议通过提供 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") };
通常的方式:
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" };
现在,这是否美好由您决定。我还会考虑卡片 class 是否应该使用字符串。枚举可能更好,并且可能会节省一些验证和解析。