当前位置:  开发笔记 > 编程语言 > 正文

C#中的"<>"语法是什么

如何解决《C#中的"<>"语法是什么》经验,为你挑选了2个好方法。

我一直在学习C#的基础知识,但没有得到一个很好的解释:

var l = new List();

我不知道它在做什么,或者它List是否正在做魔术.我也看到过< >标签中抛出的对象.

有人可以用例子向我解释一下吗?



1> FlySwat..:

这是C#的通用语法.

基本概念是它允许您使用Type占位符并在编译时替换实际的实际类型.

例如,旧的方式:

ArrayList foos = new Arraylist();
foos.Add("Test");

通过使ArrayList存储一个System.Objects列表(所有.NET的基本类型).

因此,当从列表中添加或检索对象时,CLR必须将其强制转换为对象,基本上真正发生的是:

foos.Add("Test" as System.Object);
string s = foos[1] as String.

这会导致演员的性能下降,而且它也不安全,因为我可以这样做:

ArrayList listOfStrings = new ArrayList();
listOfStrings.Add(1);
listOfStrings.Add("Test");

这将编译得很好,即使我在listOfStrings中放入一个整数.

泛型改变了所有这一切,现在使用Generics我可以声明我的集合所期望的类型:

List listOfIntegers = new List();
List listOfStrings = new List();

listOfIntegers.add(1);

// Compile time error.
listOfIntegers.add("test");

这提供了编译时类型的安全性,并避免了昂贵的铸造操作.

尽管存在一些高级边缘情况,但您利用它的方式非常简单.基本概念是通过使用类型占位符使您的类类型不可知,例如,如果我想创建一个通用的"添加两件事"类.

public class Adder
{
   public T AddTwoThings(T t1, T t2)
   {
       return t1 + t2;
   }
}

Adder stringAdder = new Adder();
Console.Writeline(stringAdder.AddTwoThings("Test,"123"));

Adder intAdder = new Adder();
Console.Writeline(intAdder.AddTwoThings(2,2));

有关泛型的更详细解释,我不能通过C#推荐CLR一书.


AddTwoThings示例已在SO上多次覆盖,并且无效.

2> Jon Skeet..:

这是泛型 - 它是一种类型参数化的形式.在你的例子中,它引用了一个字符串列表 - 列表只会包含字符串:编译器会对它进行处理(相当多),就好像API文档中提到的"T"实际上都是"字符串"一样.因此,您只能向其中添加字符串,如果您使用索引器,则无需转换为字符串等.

说实话,在网上论坛上提供泛型详细报道几乎是不可能的.(在深度的C#中,我花了近50页来讨论泛型.)然而,凭借该功能的名称,您应该处于更好的位置以了解更多信息.MSDN "C#Generics简介"可能是一个很好的起点.

在SO上询问有关泛型的具体问题可能会产生良好的结果 - 我只是不认为它可以在一个问题/答案中真正涵盖.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有