Skip to content

Commit 6a553ac

Browse files
committed
util: 添加一些扩展辅助
1 parent bd0c6af commit 6a553ac

File tree

2 files changed

+53
-2
lines changed

2 files changed

+53
-2
lines changed

src/OSharp.Utils/Extensions/RandomExtensions.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Collections.Generic;
33
using System.Linq;
44

@@ -10,6 +10,7 @@ namespace OSharp.Extensions
1010
/// </summary>
1111
public static class RandomExtensions
1212
{
13+
private static readonly Random _random = new Random();
1314
private static readonly string[] Xings = @"赵,钱,孙,李,周,吴,郑,王,冯,陈,褚,卫,蒋,沈,韩,杨,朱,秦,尤,许,何,吕,施,张,孔,曹,严,华,金,魏,陶,姜,戚,谢,邹,喻,柏,水,窦,章,云,苏,潘,葛,奚,范,彭,郎,鲁,韦,昌,马,苗,凤,花,方,俞,任,袁,柳,丰,鲍,史,唐,费,廉,岑,薛,雷,贺,倪,汤,滕,殷,罗,毕,郝,邬,安,常,乐,于,时,傅,皮,卞,齐,康,伍,余,元,卜,顾,孟,平,黄,和,穆,萧,尹,姚,邵,湛,汪,祁,毛,禹,狄,米,贝,明,臧,计,伏,成,戴,谈,宋,茅,庞,熊,纪,舒,屈,项,祝,董,梁,杜,阮,蓝,闵,席,季,麻,强,贾,路,娄,危,江,童,颜,郭,梅,盛,林,刁,钟,徐,丘,骆,高,夏,蔡,田,樊,胡,凌,霍,虞,万,支,柯,昝,管,卢,莫,经,房,裘,缪,干,解,应,宗,丁,宣,贲,邓,郁,单,杭,洪,包,诸,左,石,崔,吉,钮,龚,程,嵇,邢,滑,裴,陆,荣,翁,荀,羊,於,惠,甄,麴,家,封,芮,羿,储,靳,汲,邴,糜,松,井,段,富,巫,乌,焦,巴,弓,牧,隗,山,谷,车,侯,宓,蓬,全,郗,班,仰,秋,仲,伊,宫,宁,仇,栾,暴,甘,钭,厉,戌,祖,武,符,刘,景,詹,束,龙,叶,幸,司,韶,郜,黎,蓟,薄,印,宿,白,怀,蒲,邰,从,鄂,索,咸,籍,赖,卓,蔺,屠,蒙,池,乔,阴,郁,胥,能,苍,双,闻,莘,党,翟,谭,贡,劳,逢,姬,申,扶,堵,冉,宰,郦,雍,郤,璩,桑,桂,濮,牛,寿,通,边,扈,燕,冀,郏,浦,尚,农,温,别,庄,晏,柴,瞿,阎,充,慕,连,茹,习,宦,艾,鱼,容,向,古,易,慎,戈,廖,庾,终,暨,居,衡,步,都,耿,满,弘,匡,国,文,寇,广,禄,阙,东,欧,殳,沃,利,蔚,越,菱,隆,师,巩,厍,聂,晃,勾,敖,融,冷,訾,辛,阚,那,简,饶,空,曾,毋,沙,乜,养,鞠,须,丰,巢,关,蒯,相,查,后,荆,红,游,竺,权,逯,盖,益,桓,公,万俟,司马,上官,欧阳,夏侯,诸葛,闻人,东方,赫连,皇甫,尉迟,公羊,澹台,公冶,宗政,濮阳,淳于,单于,太叔,申屠,公孙,仲孙,轩辕,令狐,钟离,宇文,长孙,慕容,司徒,司空".Replace("\r\n", "").Split(',');
1415
private static readonly string[] Mings = @"伟,刚,勇,毅,俊,峰,强,军,平,保,东,文,辉,力,明,永,健,世,广,志,义,兴,良,海,山,仁,波,宁,贵,福,生,龙,元,全,国,胜,学,祥,才,发,武,新,利,清,飞,彬,富,顺,信,子,杰,涛,昌,成,康,星,光,天,达,安,岩,中,茂,进,林,有,坚,和,彪,博,诚,先,敬,震,振,壮,会,思,群,豪,心,邦,承,乐,绍,功,松,善,厚,庆,磊,民,友,裕,河,哲,江,超,浩,亮,政,谦,亨,奇,固,之,轮,翰,朗,伯,宏,言,若,鸣,朋,斌,梁,栋,维,启,克,伦,翔,旭,鹏,泽,晨,辰,士,以,建,家,致,树,炎,德,行,时,泰,盛,雄,琛,钧,冠,策,腾,楠,榕,风,航,弘,秀,娟,英,华,慧,巧,美,娜,静,淑,惠,珠,翠,雅,芝,玉,萍,红,娥,玲,芬,芳,燕,彩,春,菊,兰,凤,洁,梅,琳,素,云,莲,真,环,雪,荣,爱,妹,霞,香,月,莺,媛,艳,瑞,凡,佳,嘉,琼,勤,珍,贞,莉,桂,娣,叶,璧,璐,娅,琦,晶,妍,茜,秋,珊,莎,锦,黛,青,倩,婷,姣,婉,娴,瑾,颖,露,瑶,怡,婵,雁,蓓,纨,仪,荷,丹,蓉,眉,君,琴,蕊,薇,菁,梦,岚,苑,婕,馨,瑗,琰,韵,融,园,艺,咏,卿,聪,澜,纯,毓,悦,昭,冰,爽,琬,茗,羽,希,欣,飘,育,滢,馥,筠,柔,竹,霭,凝,晓,欢,霄,枫,芸,菲,寒,伊,亚,宜,可,姬,舒,影,荔,枝,丽,阳,妮,宝,贝,初,程,梵,罡,恒,鸿,桦,骅,剑,娇,纪,宽,苛,灵,玛,媚,琪,晴,容,睿,烁,堂,唯,威,韦,雯,苇,萱,阅,彦,宇,雨,洋,忠,宗,曼,紫,逸,贤,蝶,菡,绿,蓝,儿,翠,烟".Replace("\r\n", "").Split(',');
1516
private static readonly string[] NationNames = @"汉族,壮族,满族,回族,苗族,维吾尔族,土家族,彝族,蒙古族,藏族,布依族,侗族,瑶族,朝鲜族,白族,哈尼族,哈萨克族,黎族,傣族,畲族,傈僳族,仡佬族,东乡族,高山族,拉祜族,水族,佤族,纳西族,羌族,土族,仫佬族,锡伯族,柯尔克孜族,达斡尔族,景颇族,毛南族,撒拉族,布朗族,塔吉克族,阿昌族,普米族,鄂温克族,怒族,京族,基诺族,德昂族,保安族,俄罗斯族,裕固族,乌兹别克族,门巴族,鄂伦春族,独龙族,塔塔尔族,赫哲族,珞巴族".Replace("\r\n", "").Split(',');
@@ -76,6 +77,22 @@ public static T NextItem<T>(this Random random, T[] items)
7677
return items[random.Next(items.Length)];
7778
}
7879

80+
public static T NextOne<T>(this IEnumerable<T> items)
81+
{
82+
if (items == null)
83+
{
84+
throw new ArgumentNullException(nameof(items));
85+
}
86+
87+
var list = items.ToList();
88+
if (list.Count == 0)
89+
{
90+
return default;
91+
}
92+
93+
var index = _random.Next(0, list.Count);
94+
return list[index];
95+
}
7996
/// <summary>
8097
/// 返回指定时间段内的随机时间值
8198
/// </summary>

src/OSharp.Utils/Extensions/StringExtensions.cs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ public static string ReverseString(this string value)
384384
value.CheckNotNull("value");
385385
return new string(value.Reverse().ToArray());
386386
}
387-
387+
388388
/// <summary>
389389
/// 单词变成单数形式
390390
/// </summary>
@@ -476,6 +476,40 @@ public static bool IsImageFile(this string filename)
476476
}
477477
}
478478

479+
/// <summary>
480+
/// 将16进制字符串转为数值
481+
/// </summary>
482+
public static int ToDec(this string hex)
483+
{
484+
if (string.IsNullOrEmpty(hex))
485+
{
486+
throw new ArgumentException("16进制字符串不能为空", nameof(hex));
487+
}
488+
489+
// 移除可能的前缀(如0x, 0X)
490+
hex = hex.Trim();
491+
if (hex.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
492+
{
493+
hex = hex.Substring(2);
494+
}
495+
496+
// 验证是否为有效的16进制字符串
497+
if (!hex.All(c => char.IsDigit(c) || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f')))
498+
{
499+
throw new ArgumentException("字符串不是有效的16进制格式", nameof(hex));
500+
}
501+
502+
return Convert.ToInt32(hex, 16);
503+
}
504+
505+
/// <summary>
506+
/// 将10进制数值转为16进制字符串
507+
/// </summary>
508+
public static string ToHex(this int dec, int length = 8)
509+
{
510+
return dec.ToString($"X{length}");
511+
}
512+
479513
/// <summary>
480514
/// 以指定字符串作为分隔符将指定字符串分隔成数组
481515
/// </summary>

0 commit comments

Comments
 (0)