通用类型方法

时间:2014-04-25 00:05:27

标签: c# asp.net generics

为什么我需要这样的东西有哪些实际案例:

  public void Show<FirstType, SecondType>(FirstType first, SecondType second)
  {
      //Do Something
  }

而不仅仅是这个:

  public void Show(FirstType first, SecondType second)
  {
     //Do Something
  }

非常感谢

4 个答案:

答案 0 :(得分:2)

此示例来自框架,但LINQ扩展方法以这种方式实现。例如,.Where的签名是:

IEnumerable.Where<TSource> (IEnumerable<TSource>, Func<TSource, Boolean>);

这并没有像你的例子那样有两个类型的参数,但是显示了一个很好的用例。 &#34; Where&#34;不是特定于类型的,并且因为稍后给出的谓词使用相同的类型参数,所以在执行比较时会获得类型安全性。

这远远优于a。对于每种可能的类型,因此使用泛型。

答案 1 :(得分:1)

因为你需要为这样的事情创建另一种方法,在某些情况下可能会重复。为避免重复逻辑,当类型有一些共同的行为时,您使用泛型。此外,它的类型安全,因此当您使用泛型时不需要装箱/取消装箱。

public void Show(ThirdType third, FourthType fourth)
  {
     //Do Something
  }

答案 2 :(得分:0)

我可以简单地使用泛型,例如,比较相同类型的两个变量并根据相等性返回true或false的方法:

public static bool Equals<T>(T Variable1, T Variable2)
{
    return Variable1.Equals(Variable2);
}

此方法现在可以重用于任何参数类型。 T代表类型,通常以这种方式编写,但不一定。使用此类,您可以比较在main方法中定义的任何类型的相等性,而无需在方法内部装箱/取消装箱类型。另外,在main方法中使用它时,您的等式比较方法对于错误的类型输入是安全的。使用此方法的示例如下:

public static void Main(string[] args)
{
    if (VarCompare<int>(10, 10))
    {
        Console.WriteLine("Inputs are equal.");
    }
    else
    {
        Console.WriteLine("Inputs aren't equal.");
    }
}

只需将if条件更改为VarCompare<string>("A", "B")即可比较两种字符串类型而不是整数。

答案 3 :(得分:0)

当你想要两个具有不同类型的通用参数时,一个很好的例子是Dictionary<TKey, TValue>

http://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx