예제 #1
0
        /// <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());
        }
예제 #2
0
        /// <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(), ""));
        }
예제 #3
0
        /// <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());
        }
예제 #4
0
        /// <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());
        }
예제 #5
0
        /// <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);
            }
        }
예제 #6
0
        //得到物体在场景中的路径
        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());
        }
예제 #7
0
        /// <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());
            }
        }