创建不同类型的堆栈

时间:2016-06-27 11:22:17

标签: c#

我的主要问题是我有四个枚举:

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屏幕中并且我去Play.Main,我需要将它们存储在一种堆栈中以返回Main.Main。我不知道是否可以这样做(我不这么认为),但我只想确定。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

var stack = new Stack<Enum>();
stack.Push(Main.PageSelect);
var value = stack.Pop();
if (value is Main)
{
    Main page = (Main)value;
    // etc
}

答案 1 :(得分:-1)

再创建一个枚举来存储您需要的所有枚举:

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(...);
    ...
}