/// <summary> /// 构造URL参数信息 /// </summary> /// <param name="includeEmpty">是否包括空值参数</param> /// <param name="nameValues">要构造的URL参数信息,由键值对构成,如name=value</param> /// <returns>返回构造后URL参数信息</returns> public virtual Dictionary<string, List<object>> BuildUrlParams(bool includeEmpty, params object[] nameValues) { // 定义新的URL参数字典 Dictionary<string, List<object>> newParams = new Dictionary<string, List<object>>(); // 构造要设置的URL参数信息 string nameValue = string.Join("&", nameValues); // 拆分URL参数信息 string[] oldParams = nameValue.Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries); // 遍历每个URL参数 for (int i = 0, length = oldParams.Length; i < length; i++) { // 获取URL参数的键值对 string[] items = oldParams[i].Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries); // 判断URL参数的键值对是否有效 if (items.Length > 0) { // 获取参数名 string name = items[0]; // 获取参数值 string value = null; if (items.Length > 1) { value = items[1]; } // 判断URL参数的键值对是否有效 if (includeEmpty || value != null) { // 获取已构造的参数值 List<object> values; if (!newParams.TryGetValue(name, out values)) { // 没有构造过参数则添加新的参数信息 values = newParams[name] = new List<object>(); } // 添加新的参数值 if (value != null) { // 如参数未URL编码则对其进行编码 value = HttpUtility.UrlDecode(value, Encoding) == value ? HttpUtility.UrlEncode(value, Encoding) : value; values.Add(value); } } } } // 返回构造后URL参数信息 return newParams; } /// <summary> /// 设置URL参数 /// </summary> /// <param name="url">要设置参数的URL</param> /// <param name="nameValues">要设置的参数信息,由键值对构成,如name=value</param> /// <returns>返回设置参数后的URL</returns> public virtual string SetUrlParams(string url, params object[] nameValues) { // 构造要设置的URL参数信息 Dictionary<string, List<object>> newParams = BuildUrlParams(true, nameValues); // 获取URL地址中参数开始索引 int index = url.IndexOf("?"); // 判断URL地址中是否有参数 if (index >= 0) { // 构造原始的URL参数信息 Dictionary<string, List<object>> oldParams = BuildUrlParams(false, url.Substring(index + "?".Length)); // 获取不带参数的URL地址 url = url.Substring(0, index); // 判断是否存在原始URL参数信息 if (oldParams.Count > 0) { // 遍历要设置的URL参数信息 foreach (KeyValuePair<string, List<object>> item in newParams) { // 将要设置的URL参数信息覆盖添加到原始参数信息中 oldParams[item.Key] = item.Value; } // 重新设置URL参数信息 newParams = oldParams; } } // 判断是否有参数 if (newParams.Count > 0) { // 构造新的URL参数信息 string newParam = string.Join("&", newParams.Where(n => n.Value.Count > 0).Select(n => string.Format("{0}={1}", n.Key, string.Join(",", n.Value)))); // 返回构造后的URL地址 return string.Format("{0}?{1}", url, newParam); } else { // 没有参数则返回不带参数的URL地址 return url; } }
关于JavaScript中设置URL参数的说明
/** * 设置URL参数 * url:要设置参数的URL * name:参数名 * value:参数值 * return:返回设置参数后的URL */ function setUrlParam(url, name, value) { // 获取URL地址中参数开始索引 var index = url.indexOf("?"); // 判断URL地址中是否有参数 if (index >= 0) { // 获取不带参数的URL地址 var baseUrl = url.substring(0, index); // 获取URL地址中的参数信息 var paramUrl = url.substring(index); // 获取要设置的参数的索引 index = paramUrl.indexOf("?" + name + "="); // 判断要设置的参数是否是第一个参数 if (index == 0) { // 获取要设置的参数后面的参数开始的索引 index = paramUrl.indexOf("&"); // 判断后面是否有参数 if (index >= 0) { // 有参数则构造新的URL地址 return baseUrl + "?" + name + "=" + value + paramUrl.substring(index) } else { // 没参数则构造新的URL地址 return baseUrl + "?" + name + "=" + value; } } else { // 不是第一个参数则获取要设置参数的索引位置 index = paramUrl.indexOf("&" + name + "="); // 判断是否存在要设置的参数 if (index >= 0) { // 获取要设置参数的前面的参数 var temp1 = paramUrl.substring(0, index); // 获取要设置参数的后面的参数 var temp2 = paramUrl.substring(index + ("&" + name + "=").length); // 获取要设置的参数后面的参数开始的索引 index = temp2.indexOf("&"); // 判断后面是否有参数 if (index >= 0) { // 有参数则构造新的URL地址 return baseUrl + temp1 + "&" + name + "=" + value + temp2.substring(index); } else { // 没参数则构造新的URL地址 return baseUrl + temp1 + "&" + name + "=" + value; } } else { // 不存在参数则构造新的URL地址 return url + "&" + name + "=" + value; } } } else { // 原URL地址中没参数则直接构成新的URL地址 return url + "?" + name + "=" + value; } }
关于C#中按位处理枚举的说明
一、定义:
在枚举上添加[Flags]属性,并以2的幂定义枚举的各个值:
[Flags] public enum TestEnum { Value0 = 1, Value1 = 2, Value2 = 4, Value3 = 8, Value4 = 16, All = Value0 | Value1 | Value2 | Value3 | Value4 }
二、比较:
按位运算比较枚举值是否包括某个值:
// 定义枚举变量 TestEnum testEnum = TestEnum.Value1 | TestEnum.Value2; // 判断枚举变量是否包含枚举Value2的值 bool hasValue = ((testEnum & TestEnum.Value2) == TestEnum.Value2); // 返回判断结果 return hasValue;
更多信息请参阅:FlagsAttribute 类 (System)
关于C#中设置URL参数的说明
/// <summary> /// 设置URL参数 /// </summary> /// <param name="url">要设置参数的URL</param> /// <param name="name">参数名</param> /// <param name="value">参数值</param> /// <returns>返回设置参数后的URL</returns> public string SetUrlParam(string url, string name, object value) { // 获取URL地址中参数开始索引 int index = url.IndexOf("?"); // 判断URL地址中是否有参数 if (index >= 0) { // 获取不带参数的URL地址 string baseUrl = url.Substring(0, index); // 获取URL地址中的参数信息 string paramUrl = url.Substring(index); // 判断要设置的参数是否是第一个参数 if (paramUrl.StartsWith("?" + name + "=")) { // 获取要设置的参数后面的参数开始的索引 index = paramUrl.IndexOf("&"); // 判断后面是否有参数 if (index >= 0) { // 有参数则构造新的URL地址 return string.Format("{0}?{1}={2}{3}", baseUrl, name, value, paramUrl.Substring(index)); } else { // 没参数则构造新的URL地址 return string.Format("{0}?{1}={2}", baseUrl, name, value); } } else { // 不是第一个参数则获取要设置参数的索引位置 index = paramUrl.IndexOf("&" + name + "="); // 判断是否存在要设置的参数 if (index >= 0) { // 获取要设置参数的前面的参数 string temp1 = paramUrl.Substring(0, index); // 获取要设置参数的后面的参数 string temp2 = paramUrl.Substring(index + ("&" + name + "=").Length); // 获取要设置的参数后面的参数开始的索引 index = temp2.IndexOf("&"); // 判断后面是否有参数 if (index >= 0) { // 有参数则构造新的URL地址 return string.Format("{0}{1}&{2}={3}{4}", baseUrl, temp1, name, value, temp2.Substring(index)); } else { // 没参数则构造新的URL地址 return string.Format("{0}{1}&{2}={3}", baseUrl, temp1, name, value); } } else { // 不存在参数则构造新的URL地址 return string.Format("{0}&{1}={2}", url, name, value); } } } else { // 原URL地址中没参数则直接构成新的URL地址 return string.Format("{0}?{1}={2}", url, name, value); } }
关于NPOI中设置Excel单元格样式的说明
// 在Excel工作簿中创建单元格样式 ICellStyle cellStyle = workbook.CreateCellStyle(); // 在Excel工作簿中创建字体 IFont font = workbook.CreateFont(); // 设置字体参数 font.IsBold = true; // 设置样式参数 cellStyle.SetFont(font); // 获取行 IRow row = sheet.CreateRow(0); // 获取单元格 ICell cell = row.GetCell(0); // 设置单元格样式 cell.CellStyle = cellStyle;