请教大哥:这程序写得太难看,如何取消goto却能实现同样的功能?教课书上都说尽量不用goto,下面一般程序遍历分类列表,获得当前类别的
顶层编号(父编号=0),如果不用goto还真想不出来怎么弄?各位大哥看看能不能不用goto,这程序写得真是太难看了,而且很容易落入
死循环。。
/// <summary>
/// 取得组别编号(顶层的分类编号)
/// </summary>
public static string GetGroupID(string orgClassId)
{
string groupID = string.Empty;
string classId = orgClassId;
XX:
foreach (PubClassInfo o in NewsClass)
{
// 如果是顶层分类编号则返回
if (o.ClassID.Equals(classId) && o.ParentID.Equals("0"))
{
groupID = o.ClassID;
break;
} if (o.ClassID.Equals(classId))
{
classId = o.ParentID;
goto XX;
} }
return groupID;
}
顶层编号(父编号=0),如果不用goto还真想不出来怎么弄?各位大哥看看能不能不用goto,这程序写得真是太难看了,而且很容易落入
死循环。。
/// <summary>
/// 取得组别编号(顶层的分类编号)
/// </summary>
public static string GetGroupID(string orgClassId)
{
string groupID = string.Empty;
string classId = orgClassId;
XX:
foreach (PubClassInfo o in NewsClass)
{
// 如果是顶层分类编号则返回
if (o.ClassID.Equals(classId) && o.ParentID.Equals("0"))
{
groupID = o.ClassID;
break;
} if (o.ClassID.Equals(classId))
{
classId = o.ParentID;
goto XX;
} }
return groupID;
}
是继续循环, 这个在这里不能用的... 因为得不出正确的结果.....
/// 取得组别编号(顶层的分类编号)
/// </summary>
public static string GetGroupID(string orgClassId)
{
string groupID = string.Empty;
string classId = orgClassId;
PubClassInfo o;
for (o = GetPubClassInfoByClassId(orgClassId); !o.ParentID.Equals("0"); o = GetPubClassInfoByClassId(o.ParentID));
return o.ClassID;
}static PubClassInfo GetPubClassInfoByClassId(string classId)
{
foreach (PubClassInfo o in NewsClass)
{
if (o.ClassID.Equals(orgClassId)) return o;
}
return null;
}
/// 取得组别编号(顶层的分类编号)
/// </summary>
public static string GetGroupID(string orgClassId)
{
string groupID = string.Empty;
PubClassInfo o;
for (o = GetO(orgClassId); !o.ParentID.Equals("0"); o = GetO(o.ParentID));
return o.ClassID;
}static PubClassInfo GetO(string classId)
{
foreach (PubClassInfo o in NewsClass)
{
if (o.ClassID.Equals(classId)) return o;
}
return null;
}
/// 取得组别编号(顶层的分类编号)
/// </summary>
public static string GetGroupID(string orgClassId)
{
PubClassInfo o;
for (o = GetO(orgClassId); !o.ParentID.Equals("0"); o = GetO(o.ParentID));
return o.ClassID;
}static PubClassInfo GetO(string classId)
{
foreach (PubClassInfo o in NewsClass)
{
if (o.ClassID.Equals(classId)) return o;
}
return null;
}
//用递归 大概是这意思 程序没编译 有错见谅 /// <summary>
/// 取得组别编号(顶层的分类编号)
/// </summary>
public static string GetGroupID(string orgClassId)
{
string groupID = getGroupID(orgClassId,"");
}
static string getGroupID(string classId ,string groupid){
string groupID =groupid;
foreach (PubClassInfo o in NewsClass)
{
// 如果是顶层分类编号则返回
if (o.ClassID.Equals(classId) && o.ParentID.Equals("0"))
{
groupID = o.ClassID;
break;
} if (o.ClassID.Equals(classId))
{
classId = o.ParentID;
groupID=getGroupID(classId ,groupid);
} }
return groupID; }
//名字跟你的重了 呵呵 改下
//用递归 大概是这意思 程序没编译 有错见谅 /// <summary>
/// 取得组别编号(顶层的分类编号)
/// </summary>
public static string GetGroupID(string orgClassId)
{
string groupID = getGroupID2orgClassId,"");
}
static string getGroupID2string classId ,string groupid){
string groupID =groupid;
foreach (PubClassInfo o in NewsClass)
{
// 如果是顶层分类编号则返回
if (o.ClassID.Equals(classId) && o.ParentID.Equals("0"))
{
groupID = o.ClassID;
break;
} if (o.ClassID.Equals(classId))
{
classId = o.ParentID;
groupID=getGroupID(classId ,groupid);
} }
return groupID; }
//用递归 大概是这意思 程序没编译 有错见谅 /// <summary>
/// 取得组别编号(顶层的分类编号)
/// </summary>
public static string GetGroupID(string orgClassId)
{
string groupID = getGroupID2(orgClassId,"");
}
static string getGroupID2(string classId ,string groupid){
string groupID =groupid;
foreach (PubClassInfo o in NewsClass)
{
// 如果是顶层分类编号则返回
if (o.ClassID.Equals(classId) && o.ParentID.Equals("0"))
{
groupID = o.ClassID;
break;
} if (o.ClassID.Equals(classId))
{
classId = o.ParentID;
groupID=getGroupID(classId ,groupid);
} }
return groupID; }
while (isContinue)
{
foreach (PubClassInfo o in NewsClass)
{
// 如果是顶层分类编号则返回
if (o.ClassID.Equals(classId) && o.ParentID.Equals("0"))
{
groupID = o.ClassID;
isContinue = false;
break;
} if (o.ClassID.Equals(classId))
{
classId = o.ParentID;
break;
} }
}
btw. string.Equals 有什么好? 我看着很不习惯public static string GetGroupID(string orgClassId)
{
string class_id = orgClassId; while (true) {
foreach (PubClassInfo c in NewsClass) {
if (c.ClassID == class_id) {
if (c.ParentID == "0") {
return c.ClassID;
} class_id = c.ParentID;
break;
}
}
}
}
/// 取得组别编号(顶层的分类编号)
/// </summary>
public static string GetGroupID(string orgClassId)
{
string groupID = string.Empty;
string classId = orgClassId;
XX:
foreach (PubClassInfo o in NewsClass)
{
// 如果是顶层分类编号则返回
if (o.ClassID.Equals(classId) && o.ParentID.Equals("0"))
{
groupID = o.ClassID;
break;
} if (o.ClassID.Equals(classId))
{
classId = o.ParentID;
GetGroupID(orgClassId);// goto XX;
} }
return groupID;
}