使用c#.net 4.7.1,我有一个名为Deck
的类,下面是代码:
public class Deck
{
public Card[] DeckOfCards { get; private set; } = new Card[56];
public Deck()
{
DeckOfCards = NewDeck();
}
private Card[] NewDeck()
{
Card[] newDeck = new Card[56];
....
return newDeck;
}
}
我想在Deck
中声明一个名为Shuffle
的类方法,我可以在创建的Deck
实例上调用它。这是我如何在程序中绘制Main方法的图片:
class program
{
static void Main(string[] args)
{
Deck WorkingDeck = new Deck();
WorkingDeck.DeckOfCards.Shuffle();
....
}
}
到目前为止,这里是类方法Shuffle
的全部内容:
public Card[] Shuffle(this Card[] DeckToShuffle)
{
Random rnd = new Random();
Card[] ShuffledDeck = DeckToShuffle.OrderBy(x => rnd.Next()).ToArray();
return ShuffledDeck;
}
但这要求我在方法调用中传递一个Card[]
。我希望使用WorkingDeck.DeckOfCards
作为经过改组的Deck
的方法。有人可以指出我正确的方向吗?预先感谢。
答案 0 :(得分:2)
在这种特定情况下,扩展方法将是一个很好的解决方案。
public static class Extensions
{
public static void Shuffle(this IEnumerable<Card> source)
{
// Body of Shuffle
}
}
这将帮助您根据需要调用随机播放
Deck WorkingDeck = new Deck();
WorkingDeck.DeckOfCards.Shuffle();
答案 1 :(得分:1)
首先,您可以按照以下步骤简化Deck
类:
public class Deck {
public Card[] DeckOfCards { get; private set; } = NewDeck();
private static Card[] NewDeck() {
Card[] newDeck = new Card[56];
....
return newDeck;
}
}
如果您希望Shuffle
更改Deck
中卡的顺序,则可以编写一个扩展方法,如下所示:
static class DeckExtensions {
public static void Shuffle(this deck)
{
Random rnd = new Random();
deck.DeckOfCards = deck.DeckOfCards.OrderBy(x => rnd.Next()).ToArray();
}
}
答案 2 :(得分:1)
DeckOfCards
属性是该类的成员。类上的方法可以自动(隐式或通过this
关键字)访问其成员。
public class Deck
{
public Card[] DeckOfCards { get; private set; };
public Deck()
{
this.DeckOfCards = NewDeck();
}
static Card[] NewDeck()
{
Card[] newDeck = new Card[56];
....
return newDeck;
}
public void Shuffle()
{
Random rnd = new Random();
Card[] shuffledDeck = this.DeckOfCards.OrderBy(x => rnd.Next()).ToArray();
this.DeckOfCards = shuffledDeck;
}
}
您将这样调用它:
static void Main(string[] args)
{
Deck workingDeck = new Deck();
workingDeck.Shuffle();
....
}
此设计将Deck
作为可变对象:Shuffle
更改现有卡座的顺序,而不是创建其他卡座。