public class yjProcessNode<T> where T : yjProcessNode<T> { //SortedList不允許有重複的Key,因為SortNumber可能重複,因此不能用 internal protected List<T> FChildren = new List<T>(); internal protected bool FIsRoot = true; internal protected T FParent = null; internal protected csProcess FProcess = null; public csProcess Process { get { return FProcess; } } public List<T> Children { get { return FChildren; } } public bool IsRoot { get { return FIsRoot; } } public T Parent { get { return FParent; } } public bool Find(T ANode) { if (ANode == this) return true; else { foreach (T n in FChildren) { if (n.Find(ANode)) return true; } } return false; } } public class yjProcessNode1 : yjProcessNode<yjProcessNode1> { internal protected bool FIsAuthorized = true; public bool IsAuthorized { get { return FIsAuthorized; } } } public class yjProcessNode2 : yjProcessNode<yjProcessNode2> { internal protected Dictionary<string, byte> FAuthoriy; public yjProcessNode2() { FAuthoriy = new Dictionary<string, byte>(); } public byte GetActionAuthority(string AActionID) { byte vValue=0; if (!FAuthoriy.TryGetValue(AActionID, out vValue)) vValue = 0; return vValue; } }
使用Convert.ChangeType來做強制轉換:
private static List<T> _BuildUserProcessAuthorityView<T>(string AUserID, string AProcessID, out bool AIsAdministrator) where T : yjProcessNode<T>, new()....... bool vIsProcessNode2 = (typeof(T) == typeof(yjProcessNode2)) || (typeof(T).IsSubclassOf(typeof(yjProcessNode2))); yjProcessNode2 n2 = (yjProcessNode2)Convert.ChangeType(n.Value, typeof(yjProcessNode2));