C# 在C类中调用方法

C# 在C类中调用方法,c#,generics,C#,Generics,这里有一段C代码,我正试图理解。 类在接口中具有以下可用方法 T GetLookupValue<T, S>(string sTName, string sFName, string sLuName, S value); 当我使用dotPeek查看这个类的用法时,它显示了这一点 public T GetLookupValue<T, S>(string sTName, string sFName, string sLuName, S value) { return (

这里有一段C代码,我正试图理解。 类在接口中具有以下可用方法

T GetLookupValue<T, S>(string sTName, string sFName, string sLuName, S value);
当我使用dotPeek查看这个类的用法时,它显示了这一点

 public T GetLookupValue<T, S>(string sTName, string sFName, string sLuName, S value)
{
  return (T) this.db.a(sTName, sFName, sLuName, false, (object) value, false, false);
}

我怎么称呼这个方法?我需要用什么来替换T和S?

此方法将自身呈现为一个通用的查找函数。如果实现真的可以处理任何类型,那么就可以对S和T使用任何类型

示例:

string result = GetLookupValue<string, int>("tname", "fname", "luname", 42);

MyClass result = GetLookupValue<MyClass, string>("tname", "fname", "luname", "blah");

该方法将自身呈现为一个广义查找函数。如果实现真的可以处理任何类型,那么就可以对S和T使用任何类型

示例:

string result = GetLookupValue<string, int>("tname", "fname", "luname", 42);

MyClass result = GetLookupValue<MyClass, string>("tname", "fname", "luname", "blah");
,就是这个

基本上,你只要用你想要的来代替T和S。T是您的返回类型,S将是用于最终参数值的类型

例如:

var myObject = GetLookupValue<MyObject, MyOtherObject>("sTName", "sFName", "sLuName", (MyOtherObject)myOtherObject);
int result = GetLookupValue<int, string>("tname", "fname", "luname", "some value");
这允许更健壮的代码。在这里,您可以将一种方法塑造成您需要的任何形式

泛型是将任何内容放入列表的方式:

在编译时,泛型的值被内置到代码中。因此,如果您对我上面的示例进行dotPeek,您将看到如下内容:

public MyObject GetLookupValue<MyObject, MyOtherObject>(string sTName, string sFName, string sLuName, MyOtherObject value)
{
  return (MyObject) this.db.a(sTName, sFName, sLuName, false, (object) value, false, false);
}
***然而,在写这篇文章时,将参数值作为泛型似乎毫无意义,因为它只是强制转换到对象上……他们还不如将其转换为GetLookupValuestring sTName、string sFName、string sLuName、object value;。它允许最后装箱一个值对象,比如int、double等,这就是它

基本上,你只要用你想要的来代替T和S。T是您的返回类型,S将是用于最终参数值的类型

例如:

var myObject = GetLookupValue<MyObject, MyOtherObject>("sTName", "sFName", "sLuName", (MyOtherObject)myOtherObject);
int result = GetLookupValue<int, string>("tname", "fname", "luname", "some value");
这允许更健壮的代码。在这里,您可以将一种方法塑造成您需要的任何形式

泛型是将任何内容放入列表的方式:

在编译时,泛型的值被内置到代码中。因此,如果您对我上面的示例进行dotPeek,您将看到如下内容:

public MyObject GetLookupValue<MyObject, MyOtherObject>(string sTName, string sFName, string sLuName, MyOtherObject value)
{
  return (MyObject) this.db.a(sTName, sFName, sLuName, false, (object) value, false, false);
}
***然而,在写这篇文章时,将参数值作为泛型似乎毫无意义,因为它只是强制转换到对象上……他们还不如将其转换为GetLookupValuestring sTName、string sFName、string sLuName、object value;。它允许装箱一个值对象,比如int、double等

我怎么称呼这个方法

这将取决于您要使用的类型。例如:

var myObject = GetLookupValue<MyObject, MyOtherObject>("sTName", "sFName", "sLuName", (MyOtherObject)myOtherObject);
int result = GetLookupValue<int, string>("tname", "fname", "luname", "some value");
我怎么称呼这个方法

这将取决于您要使用的类型。例如:

var myObject = GetLookupValue<MyObject, MyOtherObject>("sTName", "sFName", "sLuName", (MyOtherObject)myOtherObject);
int result = GetLookupValue<int, string>("tname", "fname", "luname", "some value");

类型T和S是类型。要调用此方法并存储结果,请使用:

SomeClass returnedObject = GetLookupValue<SomeClass, SomeOtherType>("", "", "", "");

该方法将返回一个与您为T输入的内容等效的类型。

类型T和S都是类型。要调用此方法并存储结果,请使用:

SomeClass returnedObject = GetLookupValue<SomeClass, SomeOtherType>("", "", "", "");

该方法将返回一个与您为T输入的内容等效的类型。

似乎T是您的返回类型,而S是内部用作某个值的类型

因此,您需要指定T和S的类型,因此:

SomeType result = GetLookupValue<SomeType, SomeValueType>(...);

看起来T是您的返回类型,S是一个内部用作某个值的类型

因此,您需要指定T和S的类型,因此:

SomeType result = GetLookupValue<SomeType, SomeValueType>(...);

我看不到任何通用约束,所以什么都没有。是否会导致运行时错误完全是另一个问题。您可以在这里替换任何内容。我看不到任何通用约束,所以,任何内容。是否会导致运行时错误完全是另一个问题。您可以在此处替换任何内容。