时间:2021-05-20
这篇继续分享下GetHashCode和ExpandoObject这两个比较好玩的方法。
一:GetHashCode
从MSDN上可以看到的解释是:用作特定类型的哈希函数,也就是说任何对象的实例都会有一个int32类型的HashCode,并且存放在FCL中的HashCollection中,废话不说,看个例子:
从图中可以看到,两个类实例的hashcode不同,说明二者不是同一个引用,也就有了不同的hashcode,利用这个特性,我们是不是可以生成一些随机数字呢?
1:在for循环中用random生成。
复制代码 代码如下:
static void Main(string[] args)
{
var list = new List<int>();
for (int i = 0; i < byte.MaxValue; i++)
{
list.Add(new Random().Next(0, byte.MaxValue));
}
list.ForEach((i) =>
{
Console.WriteLine(i);
});
Console.Read();
}
我们知道Random都是伪随机的,所以会出现一连串的数字重复,那么我真的想要随机数怎么办呢?这时候就可以用HashCode试试了
2:for循环中的hashcode
复制代码 代码如下:
static void Main(string[] args)
{
var list = new List<int>();
for (int i = 0; i < byte.MaxValue; i++)
{
list.Add(new Random().GetHashCode());
}
list.ForEach((i) =>
{
Console.WriteLine(i);
});
Console.Read();
}
不过我们看到,我们不断的向托管推上仍垃圾,所以对GC还是有一定的性能开销的。
二:ExpandoObject
我们知道php,asp,js都是解释性的语言,免去了编译的烦恼,我去年做过半年的php,然后回归C#,然后就会对C#的编译特别的不爽,有时候一个solution一百多个dll,编译都要10多分钟,每周的发布日都会通过自动化工具发布到生产环境,然而在到生产环境下前的各个环境中,都需要重新编译,导致很多时间都耗费在编译上面去了,不过在C#4.0之后,我们通过动态的特性,也能够做到把C#当作js来写。比如这里的ExpandoObject类,我们可以通过后期绑定来向ExpandoObject动态的追加一些属性和方法,非常有意思。不过这里要注意的是一但开了dynamic,编译器也就不认这些代码了,也就实现了免编译的功能。
复制代码 代码如下:
static void Main(string[] args)
{
dynamic obj = new System.Dynamic.ExpandoObject();
obj.Name = "hxc";
obj.Age = 20;
obj.Call = new Action(() => { Console.WriteLine("call me!!!"); });
obj.Call();
Console.Read();
}
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
扩展阅读c#基础系列1---深入理解值类型和引用类型c#基础系列2---深入理解String引言在上篇文章深入理解值类型和引用类型的时候,有的小伙伴就推荐说一说
接上文:C#Dynamic关键字之:ExpandoObject,DynamicObject,DynamicMetaOb的应用(上)为什么TryXXX方法没有被调
本文实例讲述了C#使用round函数四舍五入的方法。分享给大家供大家参考。具体分析如下:C#中的round函数实际上不是真正的四舍五入函数,一般的程序设计语言的
本文具体给出了C#常用的文件操作方法,包括C#追加文件,C#拷贝文件,C#删除文件,C#移动文件,C#创建目录。(1)C#追加文件StreamWritersw=
方法是包含一系列语句的代码块。程序通过调用该方法并指定任何所需的方法参数使语句得以执行。在C#中,每个执行的指令均在方法的上下文中执行。Main方法是每个C#应