创建不同类型的堆栈

本文关键字:堆栈 同类型 创建 | 更新日期: 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(...);
    ...
}