/// <summary> /// 获取Python风格的子字符串 /// </summary> /// <param name="astring"></param> /// <param name="startIndex">启始索引. 该处字符将包括在返回结果中. 0代表第一个字符, 负数代表倒数第几个字符(-1表示倒数第一个字符), null等同于0. 默认值是0</param> /// <param name="endIndex">结束索引. 该处字符将不包括在返回结果中. 0代表第一个字符, 负数代表倒数第几个字符(-1表示倒数第一个字符), null代表结尾. 默认值为null.</param> /// <returns>子字符串</returns> public static string SubstringPythonStyle(this string astring, int?startIndex = null, int?endIndex = null) { IjwHelper.PythonStartEndCalculator(astring.Length, out int startAt, out int endAt, startIndex, endIndex); if (endAt < 0) { return(string.Empty); } else { return(astring.SubStringFromTo(startAt, endAt)); } }
/// <summary> /// 返回命名空间.类名[命名空间.泛型参数1类名,命名空间.泛型参数2类名,...,命名空间.泛型参数n类名] /// </summary> /// <param name="type"></param> /// <returns></returns> public static string GetTypeName(this Type type) { //TODO: check #if condition what about netstandard 2.0 #if NETSTANDARD1_4 string typename = type.ToString(); #else string typename = $"{type.Namespace}.{type.Name}"; if (type.IsGenericType) { typename += IjwHelper.ToAllEnumStrings(type.GetGenericArguments(), (s) => s.GetTypeName(), ",", "[", "]"); } #endif return(typename); }