c# - c#如何编写可以在类的实例上调用的类方法
问题描述
使用 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
被洗牌。有人可以指出我能够做到这一点的正确方向吗?提前致谢。
解决方案
在这种特殊情况下,扩展方法将是一个很好的解决方案。
public static class Extensions
{
public static void Shuffle(this IEnumerable<Card> source)
{
// Body of Shuffle
}
}
这将帮助您根据需要调用 shuffle
Deck WorkingDeck = new Deck();
WorkingDeck.DeckOfCards.Shuffle();
推荐阅读
- sql-server - “distributor_admin”未定义为服务器上的远程登录,用户“distributor_admin”登录失败
- tempus-dominus-datetimepicker - 从一个日期时间选择器获取日期并在第二个日期时间选择器中显示并禁用
- javascript - 如何在函数块中获取用 var 语句声明的变量?
- android - 在屏幕共享时绘制框架以使用媒体投影(webrtc)显示捕获的内容高度宽度
- amazon-web-services - AWS 中两种不同类型的 VPC 链接的主要区别
- python - 二进制矩阵 aa(只包含 0, 1),为什么 sum(sum(aa)) 不等于 sum(sum(aa>0))?
- npm - 如何在离线机器上通过 npm 安装 appium
- r - 在 R 上使用 ggplot2 生成紧凑的科学记数法
- react-native - OkHttp certificatePinner 似乎不起作用
- elasticsearch - 如何编写包含多个字段的 query_string 的复合 Elasticsearch 查询?