使州名缩写为州名

是否内置了.NETfunction,可以用状态名称来创建状态缩写?

我知道函数编写起来并不困难,但我认为MS已经想到了比下面的x50更有效的方法:

if statename.tolower = "new york" then statename = "NY" else if 

任何其他使这更高效的想法也值得赞赏。

 if statename.tolower == "new york" then statename = "NY" else if 

所以,如果你要走这条路,我会:

  1. 使用switch语句而不是if else switch(state.ToLower()) 。 这比if语句更有效。 编译器将优化switch语句。

  2. 如果你绝对必须使用if then语句。 做

    string lowerCaseState = state.ToLower()。
    if(lowerCaseState ==“new york”){….}否则如果……

这样,您创建一个小写字符串一次(字符串是不可变的)而不是if then语句的每个部分。

实际上,我可能会使用带有静态方法的switch语句。

  1. 州名不会改变
  2. 州缩写不会改变。

您可以创建一个对象来存储值,以便在每次程序运行时加载它们,但为什么呢? 您也可以让编译器优化对不变的静态值的访问。

我希望这有帮助

  public string GetState(State state) { switch (state) { case State.AL: return "ALABAMA"; case State.AK: return "ALASKA"; case State.AS: return "AMERICAN SAMOA"; case State.AZ: return "ARIZONA"; case State.AR: return "ARKANSAS"; case State.CA: return "CALIFORNIA"; case State.CO: return "COLORADO"; case State.CT: return "CONNECTICUT"; case State.DE: return "DELAWARE"; case State.DC: return "DISTRICT OF COLUMBIA"; case State.FM: return "FEDERATED STATES OF MICRONESIA"; case State.FL: return "FLORIDA"; case State.GA: return "GEORGIA"; case State.GU: return "GUAM"; case State.HI: return "HAWAII"; case State.ID: return "IDAHO"; case State.IL: return "ILLINOIS"; case State.IN: return "INDIANA"; case State.IA: return "IOWA"; case State.KS: return "KANSAS"; case State.KY: return "KENTUCKY"; case State.LA: return "LOUISIANA"; case State.ME: return "MAINE"; case State.MH: return "MARSHALL ISLANDS"; case State.MD: return "MARYLAND"; case State.MA: return "MASSACHUSETTS"; case State.MI: return "MICHIGAN"; case State.MN: return "MINNESOTA"; case State.MS: return "MISSISSIPPI"; case State.MO: return "MISSOURI"; case State.MT: return "MONTANA"; case State.NE: return "NEBRASKA"; case State.NV: return "NEVADA"; case State.NH: return "NEW HAMPSHIRE"; case State.NJ: return "NEW JERSEY"; case State.NM: return "NEW MEXICO"; case State.NY: return "NEW YORK"; case State.NC: return "NORTH CAROLINA"; case State.ND: return "NORTH DAKOTA"; case State.MP: return "NORTHERN MARIANA ISLANDS"; case State.OH: return "OHIO"; case State.OK: return "OKLAHOMA"; case State.OR: return "OREGON"; case State.PW: return "PALAU"; case State.PA: return "PENNSYLVANIA"; case State.PR: return "PUERTO RICO"; case State.RI: return "RHODE ISLAND"; case State.SC: return "SOUTH CAROLINA"; case State.SD: return "SOUTH DAKOTA"; case State.TN: return "TENNESSEE"; case State.TX: return "TEXAS"; case State.UT: return "UTAH"; case State.VT: return "VERMONT"; case State.VI: return "VIRGIN ISLANDS"; case State.VA: return "VIRGINIA"; case State.WA: return "WASHINGTON"; case State.WV: return "WEST VIRGINIA"; case State.WI: return "WISCONSIN"; case State.WY: return "WYOMING"; } throw new Exception("Not Available"); } } public State GetStateByName(string name) { switch (name.ToUpper()) { case "ALABAMA": return State.AL; case "ALASKA": return State.AK; case "AMERICAN SAMOA": return State.AS; case "ARIZONA": return State.AZ; case "ARKANSAS": return State.AR; case "CALIFORNIA": return State.CA; case "COLORADO": return State.CO; case "CONNECTICUT": return State.CT; case "DELAWARE": return State.DE; case "DISTRICT OF COLUMBIA": return State.DC; case "FEDERATED STATES OF MICRONESIA": return State.FM; case "FLORIDA": return State.FL; case "GEORGIA": return State.GA; case "GUAM": return State.GU; case "HAWAII": return State.HI; case "IDAHO": return State.ID; case "ILLINOIS": return State.IL; case "INDIANA": return State.IN; case "IOWA": return State.IA; case "KANSAS": return State.KS; case "KENTUCKY": return State.KY; case "LOUISIANA": return State.LA; case "MAINE": return State.ME; case "MARSHALL ISLANDS": return State.MH; case "MARYLAND": return State.MD; case "MASSACHUSETTS": return State.MA; case "MICHIGAN": return State.MI; case "MINNESOTA": return State.MN; case "MISSISSIPPI": return State.MS; case "MISSOURI": return State.MO; case "MONTANA": return State.MT; case "NEBRASKA": return State.NE; case "NEVADA": return State.NV; case "NEW HAMPSHIRE": return State.NH; case "NEW JERSEY": return State.NJ; case "NEW MEXICO": return State.NM; case "NEW YORK": return State.NY; case "NORTH CAROLINA": return State.NC; case "NORTH DAKOTA": return State.ND; case "NORTHERN MARIANA ISLANDS": return State.MP; case "OHIO": return State.OH; case "OKLAHOMA": return State.OK; case "OREGON": return State.OR; case "PALAU": return State.PW; case "PENNSYLVANIA": return State.PA; case "PUERTO RICO": return State.PR; case "RHODE ISLAND": return State.RI; case "SOUTH CAROLINA": return State.SC; case "SOUTH DAKOTA": return State.SD; case "TENNESSEE": return State.TN; case "TEXAS": return State.TX; case "UTAH": return State.UT; case "VERMONT": return State.VT; case "VIRGIN ISLANDS": return State.VI; case "VIRGINIA": return State.VA; case "WASHINGTON": return State.WA; case "WEST VIRGINIA": return State.WV; case "WISCONSIN": return State.WI; case "WYOMING": return State.WY; } throw new Exception("Not Available"); } public enum State { AL, AK, AS, AZ, AR, CA, CO, CT, DE, DC, FM, FL, GA, GU, HI, ID, IL, IN, IA, KS, KY, LA, ME, MH, MD, MA, MI, MN, MS, MO, MT, NE, NV, NH, NJ, NM, NY, NC, ND, MP, OH, OK, OR, PW, PA, PR, RI, SC, SD, TN, TX, UT, VT, VI, VA, WA, WV, WI, WY } 

刚刚谈到Homam的回答。 我有switch语句返回带有标准shell的状态。

  switch (stateCode) { case "AL": return "Alabama"; case "AK": return "Alaska"; case "AS": return "American Samoa"; case "AZ": return "Arizona"; case "AR": return "Arkansas"; case "CA": return "California"; case "CO": return "Colorado"; case "CT": return "Connecticut"; case "DE": return "Delaware"; case "DC": return "District Of Columbia"; case "FM": return "Federated States Of Micronesia"; case "FL": return "Florida"; case "GA": return "Georgia"; case "GU": return "Guam"; case "HI": return "Hawaii"; case "ID": return "Idaho"; case "IL": return "Illinois"; case "IN": return "Indiana"; case "IA": return "Iowa"; case "KS": return "Kansas"; case "KY": return "Kentucky"; case "LA": return "Louisiana"; case "ME": return "Maine"; case "MH": return "Marshall Islands"; case "MD": return "Maryland"; case "MA": return "Massachusetts"; case "MI": return "Michigan"; case "MN": return "Minnesota"; case "MS": return "Mississippi"; case "MO": return "Missouri"; case "MT": return "Montana"; case "NE": return "Nebraska"; case "NV": return "Nevada"; case "NH": return "New Hampshire"; case "NJ": return "New Jersey"; case "NM": return "New Mexico"; case "NY": return "New York"; case "NC": return "North Carolina"; case "ND": return "North Dakota"; case "MP": return "Northern Mariana Islands"; case "OH": return "Ohio"; case "OK": return "Oklahoma"; case "OR": return "Oregon"; case "PW": return "Palau"; case "PA": return "Pennsylvania"; case "PR": return "Puerto Rico"; case "RI": return "Rhode Island"; case "SC": return "South Carolina"; case "SD": return "South Dakota"; case "TN": return "Tennessee"; case "TX": return "Texas"; case "UT": return "Utah"; case "VT": return "Vermont"; case "VI": return "Virgin Islands"; case "VA": return "Virginia"; case "WA": return "Washington"; case "WV": return "West Virginia"; case "WI": return "Wisconsin"; case "WY": return "Wyoming"; } 

您应该使用DictionaryStringComparer.OrdinalIgnoreCase

再次添加到Homam的答案 ,我只需要一个文本翻译,所以我拿出了枚举:

 public string GetStateByName(string name) { switch (name.ToUpper()) { case "ALABAMA": return "AL"; case "ALASKA": return "AK"; case "AMERICAN SAMOA": return "AS"; case "ARIZONA": return "AZ"; case "ARKANSAS": return "AR"; case "CALIFORNIA": return "CA"; case "COLORADO": return "CO"; case "CONNECTICUT": return "CT"; case "DELAWARE": return "DE"; case "DISTRICT OF COLUMBIA": return "DC"; case "FEDERATED STATES OF MICRONESIA": return "FM"; case "FLORIDA": return "FL"; case "GEORGIA": return "GA"; case "GUAM": return "GU"; case "HAWAII": return "HI"; case "IDAHO": return "ID"; case "ILLINOIS": return "IL"; case "INDIANA": return "IN"; case "IOWA": return "IA"; case "KANSAS": return "KS"; case "KENTUCKY": return "KY"; case "LOUISIANA": return "LA"; case "MAINE": return "ME"; case "MARSHALL ISLANDS": return "MH"; case "MARYLAND": return "MD"; case "MASSACHUSETTS": return "MA"; case "MICHIGAN": return "MI"; case "MINNESOTA": return "MN"; case "MISSISSIPPI": return "MS"; case "MISSOURI": return "MO"; case "MONTANA": return "MT"; case "NEBRASKA": return "NE"; case "NEVADA": return "NV"; case "NEW HAMPSHIRE": return "NH"; case "NEW JERSEY": return "NJ"; case "NEW MEXICO": return "NM"; case "NEW YORK": return "NY"; case "NORTH CAROLINA": return "NC"; case "NORTH DAKOTA": return "ND"; case "NORTHERN MARIANA ISLANDS": return "MP"; case "OHIO": return "OH"; case "OKLAHOMA": return "OK"; case "OREGON": return "OR"; case "PALAU": return "PW"; case "PENNSYLVANIA": return "PA"; case "PUERTO RICO": return "PR"; case "RHODE ISLAND": return "RI"; case "SOUTH CAROLINA": return "SC"; case "SOUTH DAKOTA": return "SD"; case "TENNESSEE": return "TN"; case "TEXAS": return "TX"; case "UTAH": return "UT"; case "VERMONT": return "VT"; case "VIRGIN ISLANDS": return "VI"; case "VIRGINIA": return "VA"; case "WASHINGTON": return "WA"; case "WEST VIRGINIA": return "WV"; case "WISCONSIN": return "WI"; case "WYOMING": return "WY"; } throw new Exception("Not Available"); } 

这里提供的解决方案没有错,但我想建议另一种选择,在我看来,它更好一些。 您可以定义以下Enum扩展方法,该方法使用reflection和Description属性来获取完整的州名:

 namespace System { public static class EnumExtensions { public static string GetDescription(this Enum value) { var fi = value.GetType().GetField(value.ToString()); var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); return (attributes.Length > 0) ? attributes[0].Description : value.ToString(); } } } 

基本上这将允许您执行以下操作:

 var stateName = State.AL.GetDescription(); 

现在您只需要使用Description属性修饰枚举器值:

 public enum State { [Description("Alabama") AL, [Description("Alaska") AK } 

扩展方法将为您提供状态的全名。 如果未定义描述,它将为您提供Enum值名称,例如对于阿拉斯加,它将是AK。

这样,您只需一段代码就可以为任何枚举器获取描述值,而不仅仅是状态。 您需要做的就是定义Enum值的描述,这些值需要更具描述性,扩展将完成其余的工作。

注意:扩展必须放在System命名空间中,以便开箱即用,而不必引用它的命名空间。

这是一个经过测试的C#函数,它接受美国州的缩写并返回完整的州名。 它使用比开关更紧凑的字典方法。 要回答您的问题,您只需交换密钥和值即可。

https://heuristically.wordpress.com/2011/04/19/csharp-dictionary-us-state-abbreivation-names-using-sas/

具有状态名称字段的数据库已编制索引(聚集索引(如果这是您最常搜索的字段),以便查找有效并且查询返回状态缩写:

 select s.[StateAbbreviation] from [dbo].[State] s where s.[StateName] = @StateName; 

这具有可在许多应用程序和环境中重用的优点。

这在技术上是偏离主题的,但是如果有人在省2字母代码之后选择,那么国家就是下一个。 这里是你如何获得2个字母的国家代码,首先是国家名称:

  protected string GetCountryCode(string country) { var v1 = (from c in CultureInfo.GetCultures(CultureTypes.SpecificCultures) where (new RegionInfo(c.LCID)).EnglishName != "" || (new RegionInfo(c.LCID)).EnglishName != null orderby (new RegionInfo(c.LCID)).EnglishName ascending select new { Code = (new RegionInfo(c.LCID)).TwoLetterISORegionName, Name = (new RegionInfo(c.LCID)).EnglishName }).Distinct(); string code = v1.Where(t => t.Name.ToLower() == country.ToLower()).FirstOrDefault().Code; if (!string.IsNullOrEmpty(code)) return code; else return ""; }