根据 水如烟的vb代码转换过来的C#代码 感谢水如烟..

/**//// -----------------------------------------------------------------------------
/// Project : LzmTW.Common
/// Class : Common.RegionalCodeClass.RegionalCompare
///
/// -----------------------------------------------------------------------------
/// <summary>
/// 按区划的代码排序
/// </summary>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
private class RegionalCompare : System.Collections.IComparer

...{
public int System.Collections.IComparer.Compare(object x, object y)

...{
return ((Regional)x).Code.CompareTo(((Regional)y).Code);
}
}
public class RegionalCodeClassClass

...{
private RegionalCollection _Collection;
private System.Collections.IDictionaryEnumerator _Enumerator;
//默认数据文件
private string _TxtFile = System.AppDomain.CurrentDomain.BaseDirectory + "/全国行政区划代码.txt";
private string _XmlFile = System.AppDomain.CurrentDomain.BaseDirectory + "/全国行政区划代码.xml";
public RegionalCodeClassClass()

...{
_Collection = new RegionalCollection();
}

"对外属性"#region "对外属性"

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 区划信息
/// </summary>
/// <param name="iCode">代码</param>
/// <value>区划</value>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------

public Regional Item ...{

get ...{ return _Collection.Item(iCode); }
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 区划集
/// </summary>
/// <value>区划</value>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------

public Regional[] Items ...{

get ...{
Regional[] tmp = new Regional[_Collection.Count];
int n = 0;
_Enumerator = _Collection.GetEnumerator;

...{

while (_Enumerator.MoveNext) ...{
tmp(n) = (Regional)_Enumerator.Value;
n += 1;
}
}
return tmp;
}
}
#endregion

"装入数据方式"#region "装入数据方式"

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 从文本文件导入数据
/// </summary>
/// <remarks>
/// 默认文件为程序运行目录下的"全国行政区划代码.txt"
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
public void LoadFromTxt()

...{

if (!System.IO.File.Exists(_TxtFile)) ...{
Interaction.MsgBox("文件不存在!");
return; // TODO: might not be correct. Was : Exit Sub
}
this.Load_BeforBegin();
IO.FileStream fs = new IO.FileStream(_TxtFile, IO.FileMode.Open);
IO.StreamReader sr = new IO.StreamReader(fs, System.Text.Encoding.Default);
string Line;
string tmpCode;
string tmpName;

while (sr.Peek != -1) ...{
Line = sr.ReadLine.Trim;
//除去前后空格

if (Line.Length > 6) ...{
tmpCode = Line.Substring(0, 6);
tmpName = Line.Substring(6);
Add(tmpCode, tmpName);
}
}
sr.Close();
fs.Close();
this.Load_AfterDataFinish();
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 从文本文件导入数据
/// </summary>
/// <param name="FileName">文件名</param>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
public void LoadFromTxt(string FileName)

...{
_TxtFile = FileName;
LoadFromTxt();
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 从DataTable导入数据
/// </summary>
/// <param name="Table">DataTable</param>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
public void LoadFromTable(DataTable Table)

...{

if (Table == null || Table.Rows.Count == 0) ...{
Interaction.MsgBox("没数据!");
return; // TODO: might not be correct. Was : Exit Sub
}
this.Load_BeforBegin();
string tmpCode;
string tmpName;

foreach (DataRow row in Table.Rows) ...{
tmpCode = row.Item(0);
tmpName = row.Item(1);
Add(tmpCode, tmpName);
}
this.Load_AfterDataFinish();
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 从xml文件导入数据
/// </summary>
/// <remarks>
/// 默认文件为程序运行目录下的"全国行政区划代码.xml"
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
public void LoadFromXml()

...{

if (!System.IO.File.Exists(_XmlFile)) ...{
Interaction.MsgBox("文件不存在!");
return; // TODO: might not be correct. Was : Exit Sub
}
DataSet tmpDataSet = new DataSet();
tmpDataSet.ReadXml(_XmlFile);

if (tmpDataSet.Tables.Count == 0 || tmpDataSet.Tables(0).Rows.Count == 0) ...{
Interaction.MsgBox("没有数据,或文件不符!");
return; // TODO: might not be correct. Was : Exit Sub
}
this.LoadFromTable(tmpDataSet.Tables(0));
tmpDataSet.Clear();
tmpDataSet.Dispose();
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 从xml文件导入数据
/// </summary>
/// <param name="FileName">文件名</param>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
public void LoadFromXml(string FileName)

...{
_XmlFile = FileName;
LoadFromXml();
}
private void Add(string iCode, string iName)

...{
iCode = iCode.Trim;
iName = iName.Trim;

if (iCode.Length == 6 && Microsoft.VisualBasic.IsNumeric(iCode)) ...{
//保证是六位数字
Regional tmp = new Regional(iCode, iName);
_Collection.Add(tmp);
}
}
//装入数据前的处理
private void Load_BeforBegin()

...{
_Collection.Clear();
}
//装入数据后的处理
private void Load_AfterDataFinish()

...{
Regional[] tmp = this.Items;
this.Sort(tmp);

foreach (Regional o in tmp) ...{
this.IniRegionalFullName(o);
}
}
//取全名
private void IniRegionalFullName(Regional iRegional)

...{
string iCode;
iCode = iRegional.Code;
Regional tmp1;
Regional tmp2;

switch (Convert.ToInt16(iCode.Substring(2, 2))) ...{
//中组
case 0:
//XX00XX

switch (Convert.ToInt16(iCode.Substring(4, 2))) ...{
//尾组
case 0:
//XX0000
iRegional.FullName = iRegional.Name;
break;
default:
//XX00--
break;
//未定义
}
break;
default:
//XX--XX

switch (Convert.ToInt16(iCode.Substring(4, 2))) ...{
//尾组
case 0:
//XX--00
tmp1 = this.Item(iCode.Substring(0, 2) + "0000");
if ((tmp1 != null))
iRegional.FullName = tmp1.Name + iRegional.Name;

break;
default:
//XX----
tmp1 = this.Item(iCode.Substring(0, 2) + "0000");

if ((tmp1 != null)) ...{
tmp2 = this.Item(iCode.Substring(0, 4) + "00");

if ((tmp2 != null)) ...{

if (tmp1.Name.EndsWith("市")) ...{
iRegional.FullName = tmp1.Name + iRegional.Name;
}

else ...{
iRegional.FullName = tmp2.FullName + iRegional.Name;
}
}
}

break;
}
break;
}
}
#endregion

"导出数据方式"#region "导出数据方式"

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 导出到xml文件
/// </summary>
/// <remarks>
/// 默认文件为程序运行目录下的"全国行政区划代码.xml"
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
public void WriteXml()

...{

if (_Collection.Count == 0) ...{
Interaction.MsgBox("没有数据!");
return; // TODO: might not be correct. Was : Exit Sub
}
DataSet tmpDataSet = new DataSet();
DataTable Table = new DataTable();

Table.Columns.AddRange(new DataColumn[] ...{new DataColumn("Code"), new DataColumn("Name")});
WriteTable(Table);
tmpDataSet.Tables.Add(Table);

try ...{
tmpDataSet.WriteXml(_XmlFile);
}

catch (Exception ex) ...{
Interaction.MsgBox(ex.Message);
}
Table.Clear();
Table.Dispose();
tmpDataSet.Clear();
tmpDataSet.Dispose();
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 导出到xml文件
/// </summary>
/// <param name="FileName">文件名</param>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
public void WriteXml(string FileName)

...{
_XmlFile = FileName;
WriteXml();
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 导出到DataTable
/// </summary>
/// <param name="Table">DataTable</param>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
public void WriteTable(DataTable Table)

...{

if (_Collection.Count == 0) ...{
Interaction.MsgBox("没有数据!");
return; // TODO: might not be correct. Was : Exit Sub
}
Table.Clear();
Sort(this.Items);

...{
Table.BeginInit();

foreach (Regional r in this.Items) ...{

Table.Rows.Add(new string[] ...{r.Code, r.Name});
}
//不作AcceptChanges处理,便于上载到数据库
Table.EndInit();
}
}
#endregion

"排序方式"#region "排序方式"

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 排序
/// </summary>
/// <param name="Array">区划集</param>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
public void Sort(Regional[] Array)

...{
if (Array == null || Array.Length == 0)
return; // TODO: might not be correct. Was : Exit Sub

System.Array.Sort(Array, new RegionalCompare());
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 逆序
/// </summary>
/// <param name="Array">区划集</param>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
public void Reverse(Regional[] Array)

...{
if (Array == null || Array.Length == 0)
return; // TODO: might not be correct. Was : Exit Sub

System.Array.Reverse(Array);
}
#endregion

"查找方式"#region "查找方式"
Regional[] sNowItems;
Regional[] sTmpRegion;
int sCount;
private void Search_Begin()

...{
// ERROR: Not supported in C#: ReDimStatement
sCount = 0;
snowitems = this.Items;
this.Sort(sNowItems);
}
private void Search_Add(Regional sRegional)

...{
// ERROR: Not supported in C#: ReDimStatement
sTmpRegion(sCount) = sRegional;
sCount += 1;
}
private void Search_Way(string Value, string Way)

...{

foreach (Regional o in sNowItems) ...{

switch (Way) ...{
case "Code":
if (o.Code // ERROR: Unknown binary operator Like ) {
Search_Add(o);
}

break;
case "Name":
if (o.Name // ERROR: Unknown binary operator Like ) {
Search_Add(o);
}

break;
case "Kind":
if (o.Kind.ToString // ERROR: Unknown binary operator Like ) {
Search_Add(o);
}

break;
default:
break;
}
}
}
private void Search_Way(Regional.KindType Value)

...{

foreach (Regional o in sNowItems) ...{

if (o.Kind.Equals(Value)) ...{
Search_Add(o);
}
}
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 按代码查询
/// </summary>
/// <param name="iCode">代码</param>
/// <returns>区划集</returns>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
public Regional[] SearchByCode(string iCode)

...{
Search_Begin();
Search_Way(iCode, "Code");
return sTmpRegion;
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 按名称查询
/// </summary>
/// <param name="iName">名称</param>
/// <returns>区划集</returns>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
public Regional[] SearchByName(string iName)

...{
Search_Begin();
Search_Way(iName, "Name");
return sTmpRegion;
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 按类型查询
/// </summary>
/// <param name="iKind">类型</param>
/// <returns>区划集</returns>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
public Regional[] SearchByKind(string iKind)

...{
Search_Begin();
Search_Way(iKind, "Kind");
return sTmpRegion;
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 按类型查询
/// </summary>
/// <param name="iKind">类型</param>
/// <returns>区划集</returns>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
public Regional[] SearchByKind(Regional.KindType iKind)

...{
Search_Begin();
Search_Way(iKind);
return sTmpRegion;
}
#endregion
}

/**//// -----------------------------------------------------------------------------
/// Project : LzmTW.Common
/// Class : Common.RegionalCodeClass.Regional
///
/// -----------------------------------------------------------------------------
/// <summary>
/// 区划定义
/// </summary>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
public class Regional

...{
private string _Code;
private string _Name;
private string _FullName;
private KindType _Kind;

/**//// -----------------------------------------------------------------------------
/// <summary>
/// New
/// </summary>
/// <param name="iCode">区划码</param>
/// <param name="iName">名称</param>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-23 Created
/// </history>
/// -----------------------------------------------------------------------------
public Regional(string iCode, string iName)

...{
_Code = iCode;
_Name = iName;
_Kind = GetKind(iCode);
//取类型
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 区划码
/// </summary>
/// <value></value>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-23 Created
/// </history>
/// -----------------------------------------------------------------------------

public string Code ...{

get ...{ return _Code; }
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 名称
/// </summary>
/// <value></value>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-23 Created
/// </history>
/// -----------------------------------------------------------------------------

public string Name ...{

get ...{ return _Name; }
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 全名
/// </summary>
/// <value></value>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-23 Created
/// </history>
/// -----------------------------------------------------------------------------

public string FullName ...{

get ...{ return _FullName; }

set ...{ _FullName = value; }
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 区划类型
/// </summary>
/// <value></value>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-23 Created
/// </history>
/// -----------------------------------------------------------------------------

public KindType Kind ...{

get ...{ return _Kind; }
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 转换数组
/// </summary>
/// <returns></returns>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-23 Created
/// </history>
/// -----------------------------------------------------------------------------
public Array ToArray()

...{

return new string[] ...{_Code, _Name, _FullName, _Kind.ToString};
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 基本信息
/// </summary>
/// <returns></returns>
/// <remarks>
/// 如:110107 北京市石景山区
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-23 Created
/// </history>
/// -----------------------------------------------------------------------------
public override string ToString()

...{
return _Code + " " + _FullName;
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 取区划类型
/// </summary>
/// <param name="iCode"></param>
/// <returns></returns>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-23 Created
/// </history>
/// -----------------------------------------------------------------------------
private KindType GetKind(string iCode)

...{
KindType Result = KindType.未定义;

switch (Convert.ToInt16(iCode.Substring(2, 2))) ...{
//中组
case 0:
//XX00XX

switch (Convert.ToInt16(iCode.Substring(4, 2))) ...{
//尾组
case 0:
//XX0000
Result = KindType.省;
break;
default:
//XX00--
break;
//未定义
}
break;
default:
//XX--XX

switch (Convert.ToInt16(iCode.Substring(4, 2))) ...{
//尾组
case 0:
//XX--00

switch (Convert.ToInt16(iCode.Substring(2, 2))) ...{
//中组
case 1: // TODO: to 20
Result = KindType.省直辖市;
break;
case 21: // TODO: to 50
Result = KindType.地区含州或盟;
break;
case 51: // TODO: to 99
Result = KindType.省直辖市;
break;
}
break;
//XX----
case 1: // TODO: to 20
Result = KindType.市辖区或地辖区;
break;
case 21: // TODO: to 80
Result = KindType.县或旗;
break;
case 81: // TODO: to 99
Result = KindType.省直辖县级市;
break;
default:
break;
//未定义
}
break;
}
return Result;
}

/**//// -----------------------------------------------------------------------------
/// <summary>
/// 区划类型
/// </summary>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-23 Created
/// </history>
/// -----------------------------------------------------------------------------
public enum KindType

...{
省,
省直辖市,
地区含州或盟,
市辖区或地辖区,
县或旗,
省直辖县级市,
未定义
}
}

/**//// -----------------------------------------------------------------------------
/// Project : LzmTW.Common
/// Class : Common.RegionalCodeClass.RegionalCollection
///
/// -----------------------------------------------------------------------------
/// <summary>
/// 数据字典
/// </summary>
/// <remarks>
/// </remarks>
/// <history>
/// [lzmtw] 2005-10-24 Created
/// </history>
/// -----------------------------------------------------------------------------
private class RegionalCollection : System.Collections.DictionaryBase

...{
public void Add(Regional iItem)

...{
this.Dictionary.Add(iItem.Code, iItem);
}
public void Remove(string Code)

...{
this.Dictionary.Remove(Code);
}

public Regional Item ...{

get ...{ return (Regional)this.Dictionary.Item(Code); }
}
}