创建不同类型的堆栈
本文关键字:堆栈 同类型 创建 | 更新日期: 2023-09-27 17:51:24
我的主要问题是我有四个枚举:
public enum Main : int { Loading = 0, Main, PageSelect, Achievements, Play, Settings, Store }
public enum Play : int { DarkLayer = 0, Main, AddCharacter, AddBackground, AddEffect, TakePhoto, VideoRecord, AddFilter, VideoSave}
public enum Settings : int { Main = 0, Tutorial, ParentalControl }
public enum Store : int { Main = 0, Pages, AllBookUnlocked, InsertCode, ConectionFailed, ErrorCode, TransactionFailed, BoughtPage, Send }
每一个代表我的应用程序的屏幕,我用它们来切换屏幕。我的问题是,我需要创建一个历史回去,但由于枚举有不同的类型(主要,播放,设置和存储),我不知道如何将它们存储在一个历史。
例如,如果我在Main中。主屏幕,点击播放。我需要将两者都存储在一种堆栈中以返回Main。Main。我不知道是否可以这样做(我不这么认为),但我只是想确定。
你可以这样做:
var stack = new Stack<Enum>();
stack.Push(Main.PageSelect);
var value = stack.Pop();
if (value is Main)
{
Main page = (Main)value;
// etc
}
再创建一个enum来存储所有需要的枚举:
public enum MyEnums : int { Main = 0, Play, Settings, Store }
然后你可以像这样创建一个Stack
:
var stack = new Stack<Tuple<MyEnums, int>>();
stack.Add(new Tuple<MyEnums, int>(MyEnums.Main, Main.PageSelect)); // This will be casted to int
var tuple = stack.Pop();
switch(tuple.Item1)
{
case MyEnums.Main:
var ourPage = (Main) tuple.Item2; // Cast back to an appropriate enum
return RedirectToAction(...);
...
}