这是什么“<>”方法背后意味着什么?

时间:2014-03-21 07:34:52

标签: c#

像这样:

var result1 = GetData<double>(someString);
var result2 = GetData<string>(someString);

这是什么意思?

< >

如何返回数据?

public object GetData<Type>(string a)
{
    // How do I know I should return this...

    return 2.2;

    // or this?

    return "2.2";
}

4 个答案:

答案 0 :(得分:3)

你在这里看到的被称为泛型。您可以在MSDN详细了解它们。简而言之,您可以指定Type Parameter以及您的方法。根据类型,可以采用不同的代码路径。阅读链接以获取示例等。

在您的特定情况下,返回类型独立于类型参数。你正在处理两件事。因此,在返回时,您可以使用这两个语句中的任何一个。

return 2.2;

这将返回long 2.2。另一个语句将返回string "2.2"。由于您的退货类型为Object,因此均可接受。虽然你没有在问题中说过,你正在寻找的是这样的:

//Your generic GetData method
public TEntity GetData<TEntity>(string arg1)
{
    var toReturn;
    //Do some calculations
    return (TEntity)toReturn;
}

现在,当你打这样的电话时:

var t = GetData<string>(string1);

变量t将包含string。如果你这样打电话:

var t = GetData<int>(string1);

变量t将保留int

答案 1 :(得分:1)

这是泛型方法的类型参数。

答案 2 :(得分:1)

您正在寻找的术语是泛型。这些是方法中的类型参数,这意味着方法/类可以以类型安全的方式使用特定类型,而不是回退到object的所有内容(这也会对装箱/拆箱产生性能影响)

来自C#指南:

  

泛型允许您在没有的情况下定义类型安全的数据结构   提交实际数据类型。这导致了重大意义   性能提升和更高质量的代码,因为你可以重用   数据处理算法,不需要复制特定于类型的代码。

一些快速链接:

答案 3 :(得分:1)

在称为Generic Method的方法之后的那个符号。它将在运行时推迟类型推断。

如果你将调用方法控制为

,你的GetData可能会被重写如下
GetData<float>("2.2")
GetData<string>("2.2")


public static T GetData<T>(string a)
        {
            return (T)Convert.ChangeType(a, typeof(T));
        }