当前位置:编程学习 > C#/ASP.NET >>

18个不常见的C#关键字

1、__arglist

    让我们先从__arglist开始。 __arglist是用来给方法传送参数。通常我们是通过函数头部指定的参数列表给方法传递参数的。如果我们想要给方法传递一组新的参数,我们需要重载方法。如果我们想要传递的参数数量不确定,我们需要使用param数组。我们为什么要使用__arglist,因为上面两种方法,存在的下面问题:

a、如果我们使用方法重载,一旦要传递一组新的参数,我们都要增加一个新的函数重载。

b、如果我们用param数组,参数类型必须相同或者使用param对象数组。

__arglist能解决上面的问题。你可以传递任何参数给函数,可以是任何类型,我们可以使用简单的步骤分析每个参数。

让我们先看下下面代码:

1 public int paramLength(__arglist)
2 {
3           ArgIterator iterator = new ArgIterator(__arglist);
4           return iterator.GetRemainingCount();
5 }

如果我使用下面代码调用该函数

1 int x = this.paramLength(__arglist(49,34,54,6,"Manimoy")); // returns 5 

将被返回5给变量x。这是因为我们给这个方法传递了5个参数。我们可以访问每个参数,如: 

1 TypedReference tf = iterator.GetNextArg();
2 TypedReference.ToObject(tf)

每次调用GetNextArg,GetRemainingCount将减1,直到遍历完迭代器的每个对象。

2、__refvalue 

另一个有趣的关键字是__refvalue。它是用来获取一个引用对象的的值。你可以用来从TypedReference对象中获得实际对象。这需要两个参数,第一个就是TypedReference对象和另一个是转换的类型。看看下面代码:

1 int tfValue = __refvalue(tf, int); 

3、__makeref

__makeref将使从对象中找出TypedReference对象。这跟_refvalue刚刚相反。请看下面的代码:

1 string name = "Ayan";
2 TypedReference tf = __makeref(name);

4、 __reftype

__reftype是用来从TypedReference类型的对象获得类型。看下面代码所示:

1 Type t = __reftype(tf);
2 if(t.ToString().equals("System.String"))
3 string str = __refvalue(t,string); 

注:虽然我在所有的C#版本中发现上面这些关键字,但我没在工作中使用它。在未来版本的C#可能不存在这些关键字,所以是否使用看你自己的风险。

5、Yield

    Yield出现在.NET 2.0中,使用Yield将以枚举数对象值的形式返回,yield 语句只能出现在iterator 块中,该块可用作方法、运算符或访问器的体。在以下代码中,我构建了一个名字列表,将返回长度小于5的名字列表,遇到yield break语句返回。

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,