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));