/// <summary> /// 将列表转换至字符串 /// </summary> /// <param name="value"></param> /// <returns></returns> public static string ListConvertToString <T>(this List <T> value, char split1 = ',') { Type type = value.GetType(); int Count = (int)type.GetProperty("Count").GetValue(value, null); if (Count == 0) { return(String.Empty); } MethodInfo mget = type.GetMethod("get_Item", BindingFlags.Instance | BindingFlags.Public); StringBuilder stringBuilder = MSharedStringBuilderManager.Get(); object item; string itemStr; for (int i = 0; i < Count - 1; i++) { item = mget.Invoke(value, new object[] { i }); itemStr = StringEx.ConverToString(item); stringBuilder.Append(itemStr + split1.ToString()); } item = mget.Invoke(value, new object[] { Count - 1 }); itemStr = StringEx.ConverToString(item); stringBuilder.Append(itemStr); return(stringBuilder.ToString()); }
/// <summary> /// 将Dictionary转换至字符串 /// </summary> /// <typeparam name="K"></typeparam> /// <typeparam name="V"></typeparam> /// <param name="value"></param> /// <param name="split1"></param> /// <param name="split2"></param> /// <returns></returns> public static string DictConvertToString <K, V>(this Dictionary <K, V> value, char split1 = ',', char split2 = ':') { Type type = value.GetType(); int Count = (int)type.GetProperty("Count").GetValue(value, null); if (Count == 0) { return(String.Empty); } MethodInfo getIe = type.GetMethod("GetEnumerator"); object enumerator = getIe.Invoke(value, new object[0]); System.Type enumeratorType = enumerator.GetType(); MethodInfo moveToNextMethod = enumeratorType.GetMethod("MoveNext"); PropertyInfo current = enumeratorType.GetProperty("Current"); StringBuilder stringBuilder = MSharedStringBuilderManager.Get(); while (enumerator != null && (bool)moveToNextMethod.Invoke(enumerator, new object[0])) { stringBuilder.Append(split1.ToString() + ConverToString(current.GetValue(enumerator, null))); } return(stringBuilder.ToString().ReplaceFirst(split1.ToString(), "")); }
/// <summary> /// 过滤掉emoji /// </summary> /// <param name="str"></param> /// <param name="separator"></param> /// <returns></returns> public static string DeleteEmoji(this string str) { if (string.IsNullOrEmpty(str)) { return(str); } Char[] _addedChar = str.ToCharArray(); StringBuilder command = MSharedStringBuilderManager.Get(); for (int i = 0; i < _addedChar.Length; ++i) { if (char.GetUnicodeCategory(_addedChar[i]) != UnicodeCategory.Surrogate) { command.Append(_addedChar[i]); } } return(command.ToString()); }
/// <summary> /// 将一系列的对象转换为字符串并且以符号分割 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="source"></param> /// <param name="sp"></param> /// <returns></returns> public static string Join <T>(this IEnumerable <T> source, string sp) { var result = MSharedStringBuilderManager.Get(); var first = true; foreach (T item in source) { if (first) { first = false; result.Append(item.ConverToString()); } else { result.Append(sp).Append(item.ConverToString()); } } return(result.ToString()); }
/// <summary> /// 数组转换至字符串 /// </summary> /// <param name="value"></param> /// <param name="split1"></param> /// <returns></returns> public static string ArrConvertToString(this Array value, char split1 = ',') { StringBuilder stringBuilder = MSharedStringBuilderManager.Get(); var array = value as Array; if (array.Length > 0) { stringBuilder.Append(ConverToString(array.GetValue(0))); for (int i = 1; i < array.Length; i++) { stringBuilder.Append(split1.ToString()); stringBuilder.Append(ConverToString(array.GetValue(i))); } return(stringBuilder.ToString()); } else { return(string.Empty); } }
//得到物体在场景中的路径 public static string GetGameObjectPath(Transform transform, Transform endTransform = null, bool isContainEnd = true) { if (MNullHelper.IsNull(transform)) { return(""); } Stack <Transform> paths = GetAllParentNode(transform, endTransform, isContainEnd); var path = MSharedStringBuilderManager.Get(); int pathsCount = paths.Count; for (int i = 0; i < pathsCount; i++) { Transform go = paths.Pop(); path.Append(go.name); path.Append('/'); } path.Append(transform.name); return(path.ToString()); }
/// <summary> /// 将值转化为字符串 /// </summary> /// <param name="value"></param> /// <returns></returns> public static string ConverToString(this object value, string format = null) { //Debug.logger.Log("ConverToString " + Spriter1 + " "+ Spriter2); if (value == null) { return(string.Empty); } if (value.GetType() == typeof(Vector3)) { Vector3 vector3 = (Vector3)value; return(FBracket1.ToString() + vector3.x + Spriter1.ToString() + vector3.y + Spriter1.ToString() + vector3.z + BBracket1.ToString()); } if (value.GetType() == typeof(Vector2)) { Vector2 vector2 = (Vector2)value; return(FBracket1.ToString() + vector2.x + Spriter1.ToString() + vector2.y + BBracket1.ToString()); } if (value.GetType() == typeof(Vector4)) { Vector4 vector4 = (Vector4)value; return(FBracket1.ToString() + vector4.x + Spriter1.ToString() + vector4.y + Spriter1.ToString() + vector4.z + Spriter1.ToString() + vector4.w + BBracket1.ToString()); } if (value.GetType() == typeof(Quaternion)) { Quaternion quaternion = (Quaternion)value; return(FBracket1.ToString() + quaternion.x + Spriter1.ToString() + quaternion.y + Spriter1.ToString() + quaternion.z + Spriter1.ToString() + quaternion.w + BBracket1.ToString()); } if (value.GetType() == typeof(Color)) { Color color = (Color)value; return(FBracket1.ToString() + color.r + Spriter1.ToString() + color.g + Spriter1.ToString() + color.b + BBracket1.ToString()); } System.Type type = value.GetType(); if (type.BaseType == typeof(Enum)) { return(Enum.GetName(type, value)); } if (type.IsGenericType && (type.GetGenericTypeDefinition() == typeof(Dictionary <,>))) { int Count = (int)type.GetProperty("Count").GetValue(value, null); if (Count == 0) { return(String.Empty); } MethodInfo getIe = type.GetMethod("GetEnumerator"); object enumerator = getIe.Invoke(value, new object[0]); System.Type enumeratorType = enumerator.GetType(); MethodInfo moveToNextMethod = enumeratorType.GetMethod("MoveNext"); PropertyInfo current = enumeratorType.GetProperty("Current"); var stringBuilder = MSharedStringBuilderManager.Get(); while (enumerator != null && (bool)moveToNextMethod.Invoke(enumerator, new object[0])) { stringBuilder.Append(Spriter1.ToString() + ConverToString(current.GetValue(enumerator, null))); } return(stringBuilder.ToString().ReplaceFirst(Spriter1.ToString(), "")); } if (type.IsGenericType && (type.GetGenericTypeDefinition() == typeof(KeyValuePair <,>))) { object pairKey = type.GetProperty("Key").GetValue(value, null); object pairValue = type.GetProperty("Value").GetValue(value, null); string keyStr = ConverToString(pairKey); string valueStr = ConverToString(pairValue); return(keyStr + Spriter2.ToString() + valueStr); } if (type.IsGenericType && (type.GetGenericTypeDefinition() == typeof(List <>))) { int Count = (int)type.GetProperty("Count").GetValue(value, null); if (Count == 0) { return(String.Empty); } MethodInfo mget = type.GetMethod("get_Item", BindingFlags.Instance | BindingFlags.Public); StringBuilder stringBuilder = MSharedStringBuilderManager.Get(); object item; string itemStr; for (int i = 0; i < Count - 1; i++) { item = mget.Invoke(value, new object[] { i }); itemStr = StringEx.ConverToString(item); stringBuilder.Append(itemStr + Spriter1.ToString()); } item = mget.Invoke(value, new object[] { Count - 1 }); itemStr = StringEx.ConverToString(item); stringBuilder.Append(itemStr); return(stringBuilder.ToString()); } if (type == typeof(ArrayList)) { StringBuilder builder = MSharedStringBuilderManager.Get(); var arrayList = value as ArrayList; if (arrayList.Count != 0) { for (int i = 0; i < arrayList.Count - 1; i++) { builder.Append(arrayList[i].ConverToString()).Append(","); } builder.Append(arrayList[arrayList.Count - 1].ConverToString()); } return(builder.ToString()); } if (type == typeof(Hashtable)) { StringBuilder builder = MSharedStringBuilderManager.Get(); var table = value as Hashtable; IEnumerator e = table.Keys.GetEnumerator(); while (e.MoveNext()) { var tableKey = e.Current.ConverToString(); var tableValue = table[e.Current].ConverToString(); builder.Append(tableKey).Append(StringEx.Spriter2).Append(tableValue).Append(StringEx.Spriter1); } builder.Remove(builder.Length - 2, 1); return(builder.ToString()); } if (type.IsArray) { StringBuilder stringBuilder = MSharedStringBuilderManager.Get(); var array = value as Array; if (array.Length > 0) { stringBuilder.Append(ConverToString(array.GetValue(0))); for (int i = 1; i < array.Length; i++) { stringBuilder.Append(Spriter1.ToString()); stringBuilder.Append(ConverToString(array.GetValue(i))); } return(stringBuilder.ToString()); } else { return(string.Empty); } } if (CanConvertToString(type)) { return(ToStringableObjectConvertToString(value, type)); } if (format == null) { return(value.ToString()); } else { if (value is int) { return(((int)value).ToString(format)); } else if (value is short) { return(((short)value).ToString(format)); } else if (value is long) { return(((long)value).ToString(format)); } else if (value is uint) { return(((uint)value).ToString(format)); } else if (value is ushort) { return(((ushort)value).ToString(format)); } else if (value is ulong) { return(((ulong)value).ToString(format)); } else if (value is float) { return(((float)value).ToString(format)); } else if (value is double) { return(((double)value).ToString(format)); } else if (value is byte) { return(((byte)value).ToString(format)); } return(value.ToString()); } }