2016-07-06 7 views
0

私はCardオブジェクトを格納するためにスタックを使用していますが、スタックを取得してカードオブジェクトをポップするか、System.objectをCardオブジェクトに変換する方法が見つかりません。スタック内で使用した後、System.Objectをカスタムオブジェクトに変換しますか?

私は取得していますエラーがあります。エラーCS0266は、暗黙のうちに「カード」に型「オブジェクト」に変換できません

だから私はもう少しそれに見て、それは私は考えどのようなボクシングとアンボクシングがありませんでしたが判明しかし、私はpop()の前に(カード)を追加するだけでそれを解決することができました。

+0

すべてのインスタンスは、C#でオブジェクト型にキャストすることができます(または "boxed"からそのようなタイプ)。スタックには、あなたがしようとしていることを行うためのpop/peekメソッドがあります。問題があるコードを投稿して、あなたがやろうとしていることを少し良く理解できるようにしてください。 –

+0

ようこそStackOverflowへ!私はあなたが何を話しているのか誰も知らないと思います。いくつかのコードを表示していただけますか? –

+0

何を試しましたか?どのようなエラーがありますか?いくつかのコードを入力しないと、私たちはあなたを手伝うことができなくなります。 – cverb

答えて

2

は、あなたが望む何をすべき例

using System.Collections.Generic; 

var stack = new Stack<Card>(); 
stack.Push(new Card()); 

Card card = stack.Pop() 

のための一般的なスタックに

https://msdn.microsoft.com/de-de/library/3278tedw(v=vs.110).aspx

を使用することができます。

EDIT:

[OK]を、あなたの編集後、私は、問題はここにあると思う:あなたは本当にあなたのスタックにオブジェクトをプッシュしている

object temp; 
object[] array = new object[n]; 

... 
array[swp2] = temp; 
... 

Stack<Card> r = new Stack<Card>(); 
r.Push(array[i]); 

。私は本当にこのコードをコンパイルできるのだろうかと思っています。 Visual Studioでは不可能です。

簡単な解決策は、そこにオブジェクトの代わりにカード/カード[]を使用することです。常に

Keeper temp = new Keeper(); 

temp.id = 1; 
temp.name = "The Ball"; 
deck.Push(temp); 

temp.id = 2; 
temp.name = "The Stick"; 
deck.Push(temp); 

一時同じインスタンスへの参照:私はあなたのコードで別の問題を参照してくださいところで

。したがって、次の行では、同じキーパー/アクション/ものの値だけを編集し、同じ参照を何度も繰り返し押します。

+0

ああ、私はあまりにもjavaリンクされたリンクリストに慣れているので、私はそれが同じように動作すると思った。私がこれを正しく理解していることを確認するために、私がtempをプッシュすると、スタックのtempのデータは保存されません。私がやろうとしているのは、データストレージにスタックを使用することだけです。 – Kightel

+0

Push()を呼び出すと、データへの参照だけが保存されます。プッシュとデータ変更コードの間にtemp = new Keeper()を呼び出さなければなりません。 – ErWu

+0

申し訳ありません、私は今それを追加し、すべての助けに感謝します! – Kightel

0

あなたは本当にあなたがStack<Object>を使用する必要があると考えられる場合は、シンプルなasが働くだろう:

var st = new Stack<object>(); 
st.Push("abc"); 
string str = st.Pop() as string; 

あなたが使用している場合:

Stack st1 = new Stack(); 

をあなたはディレクティブusing System.Collections.Generic;を追加して使用することができます。

Stack<Card> st1 = new Stack<Card>(); 
関連する問題