我想这是一个愚蠢的问题,但如果你可以看看
这是我的方法
public Tuple CheckRoyalFlush()
{
List<Honours> flush = new List<Honours>()
{
Honours.Ace,
Honours.King,
Honours.Queen,
Honours.Jack,
Honours.Ten
};
if (RoyalFlushJokerHelper(honoursOnTheScreen, flush) || ContainsAllItems(honoursOnTheScreen, flush))
{
Suits suit = cardsOnTheScreen.ElementAt(0).GetSuit();
foreach (Card card in cardsOnTheScreen.Skip(1))
{
if (card.GetSuit() != suit)
{
if (card.GetHonour() == Honours.Joker)
continue;
else
return new Tuple(false, null);
}
}
return new Tuple(true, new List<int> { 0, 1, 2, 3, 4 });
}
事情就是当我检查我的“如果”时,我得到了第一个方法“RoyalFlushJokerHelper”,我在那里从删除列表中删除了所有我的5个项目。
然后问题是当我进入ContainAllItems方法时,我的刷新列表是空的。
我没有通过引用传递它,为什么第一种方法改变了我的原始列表?
答案 0 :(得分:1)
在C#中,只有这些对象是值类型:
struct
Šenum
s 所有其他对象都是引用类型,当您将它们传递给函数时,将其作为参考传递 。
如果您想在不影响List
的情况下更改public bool RoyalFlushJokerHelper(object honoursOnTheScreen, List<Honours> honours)
{
var honoursCopy = honours.Clone();
// work with honoursCopy
}
,可以先将其克隆:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shuffleon" android:state_checked="true" />
<item android:drawable="@drawable/shuffleoff" android:state_selected="false" />
</selector>
请阅读有关值类型和参考类型的一些信息 例如,请查看MSDN article "Value Types and Reference Types"。