.Net的Collection类的一些使用说明

在没有今天的研究之前,我一直以为COLLECTION类里面只有arraylist和Hashtable是有用的。今天早上大起看了书以后,对Collection类有了更深的了解。其中以下的代码将是VB和C#穿插着讲。因为本人C#和VB都会,由于有些函数C#功能不是很好,所以使用了VB。

1:Collection的当家花旦当然是数组咯。。数组的定义方法为:

int[] int_array=new int[10]

int[] myIntArray = new int[5] { 1, 2, 3, 4, 5 };
上面两句话,我就不多做解释了。

2:结构体在数组中的使用,代码如下:

创建一个类:

 class test
  {
   public string str_name;
   public string str_phone;
  }
对该类的引用和使用:

test[] mytest=new test[3];
   for(int i=0;i<mytest.Length;i++)
   {
    mytest[i]=new test();
   }
   mytest[0].str_name="hello";
   mytest[1].str_name=" world!";
   mytest[0].str_phone="hahah";

3:ArrayList

ArrayList我就不多说了,反正他最大的特点就是排序。

4:Hashtable

Hashtable的缺点就是不支持排序。很遗憾,另外在C#里根据KEY取VALUE很麻烦。

5:SortedList

SortedList的使用方法和ArrayList的使用方法差不多,只是SortedList自动排序。

6:Stack

Dim st As New Stack
        st.Push("aa")
        st.Push("bb")

Stack是对仗,按照是先进后出的原则

7:Queue

 Dim myque As New System.Collections.Queue
        myque.Enqueue("aa")

Queue于Stack刚刚相反,Queue是先进先出的原则来的。

8:Specialized

Specialized下面有好多实力,自己去用一下就OK了。

9:枚举VB和C#示例:

VB:

  Dim ie As System.Collections.IEnumerator = al.Keys.GetEnumerator
        Dim str As String = ""
        While (ie.MoveNext)
            str += ie.Current
        End While

C#:

System.Collections.IEnumerator ie=sl.Keys.GetEnumerator();
   string str="";
   while(ie.MoveNext())
   {
    str+=ie.Current.ToString();
   }

<think>好的,我现在需要回答用户关于.NET泛型方法的使用方式的问题,包括教程和示例。首先,我需要整理已有的引用资料,看看里面有哪些有用的信息。 根据提供的引用,引用[1]提到泛型在.NET中的应用,包括泛型的优势、设计思想和原理。引用[2]讨论了泛型参数约束的好处,比如提高型安全和灵活性。引用[3]说明了泛型如何解决型不确定的问题,例如在集合中使用泛型。引用[4]举了LinkedList<T>和Swap方法的例子,说明泛型如何减少重复代码。 接下来,我需要将这些信息组织成一个结构清晰的回答,涵盖基本概念、定义方法、型约束、示例代码、应用场景和注意事项。可能需要分步骤讲解,确保每个部分都有对应的引用支持。 首先,介绍泛型方法的基本概念,说明它们允许在方法中使用型参数。然后,讲解如何定义泛型方法,语法结构,使用<T>。接着,型约束部分,引用[2]提到的约束条件,比如where T : struct等,这里需要详细说明不同约束的作用。 示例代码部分,需要提供几个例子,比如交换值的Swap方法,处理集合的PrintCollection,以及使用接口约束的例子。每个示例代码要符合用户给的格式,使用$...$和$$...$$,但用户这里可能只需要代码块,所以用Python的代码块格式包裹。 应用场景方面,引用[3]和[4]提到的集合操作和算法复用,可以列举几个常见场景。注意事项部分,需要提到型安全和编译时检查,引用[2]和[3]中的内容。 最后,生成相关问题,确保问题与泛型方法相关,比如约束型、性能优势、与非泛型方法的区别等。确保每个引用在回答中被正确引用,比如引用[2]在讲约束时提到,引用[4]在示例时提到。 检查LaTeX语法是否正确,所有变量用$...$,比如TKey,TValue。确保代码示例正确,没有语法错误,比如泛型方法在C#中的写法。可能用户提供的引用中有C#代码,但用户示例中的Python代码,这里需要根据问题使用C#示例,因为.NETC#相关的。 现在整理这些内容,确保符合用户的结构要求,分步骤说明,引用正确,最后生成相关问题。</think>### .NET 泛型方法使用教程与示例 #### 一、基本概念 泛型方法允许在方法定义中使用**型参数**(如$T$),使得同一方法可处理多种数据型,同时保持型安全性[^2]。泛型通过编译时型检查减少运行时错误,并避免装箱拆箱操作,提升性能[^1][^3]。 --- #### 二、泛型方法的定义 1. **语法结构** 在方法名后添加型参数声明(如$<T>$),并在参数或返回值中使用$T$: ```csharp public void MyMethod<T>(T input) { /* ... */ } ``` 2. **多型参数** 支持多个型参数(如$TKey$, $TValue$): ```csharp public TValue GetValue<TKey, TValue>(TKey key) { /* ... */ } ``` --- #### 三、泛型参数约束 通过`where`关键字添加约束,限制型参数的范围[^2]: | 约束型 | 示例 | 说明 | |-----------------------|------------------------|-----------------------------------| | /接口约束 | `where T : IComparable` | T必须实现指定接口或继承 | | 值型/引用型约束 | `where T : struct` | T必须是值型(如int) | | 构造函数约束 | `where T : new()` | T必须有无参构造函数 | 示例: ```csharp public T CreateInstance<T>() where T : new() { return new T(); // 确保T可实例化 } ``` --- #### 四、示例代码 1. **交换两个变量** ```csharp public static void Swap<T>(ref T a, ref T b) { T temp = a; a = b; b = temp; } ``` 调用: ```csharp int x = 1, y = 2; Swap(ref x, ref y); // 编译器自动推断T为int ``` 2. **处理集合元素** ```csharp public static void PrintCollection<T>(IEnumerable<T> collection) { foreach (var item in collection) { Console.WriteLine(item); } } ``` 3. **带接口约束的方法** ```csharp public static T Max<T>(T a, T b) where T : IComparable<T> { return a.CompareTo(b) > 0 ? a : b; } ``` --- #### 五、应用场景 1. **集合操作** 如$List<T>$、$Dictionary<TKey, TValue>$,避免为每种型重复实现集合逻辑[^4]。 2. **算法复用** 如排序、比较等通用算法,可适配多种数据型。 3. **型安全的数据处理** 例如数据库访问层中,泛型方法可返回强型实体[^1]。 --- #### 六、注意事项 1. **优先使用约束** 添加约束能提高代码安全性,例如强制实现$IComparable$以支持比较操作。 2. **避免过度泛化** 若方法逻辑与型无关性较弱,可能增加代码复杂度。 3. **编译时型检查** 泛型在编译时生成具体型,避免运行时型错误[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值