像这样:
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";
}
答案 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));
}