[英]Calling a method in a C# class
这是我想理解的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");
基本上,您只需将T和S替换为所需的任何内容即可。 T是您的返回类型,S将是用于最终参数( value
)的类型
例如:
var myObject = GetLookupValue<MyObject, MyOtherObject>("sTName", "sFName", "sLuName", (MyOtherObject)myOtherObject);
这允许更健壮的代码。 您可以在何处塑造一种方法,使其成为您需要的任何方法
泛型是如何将任何内容放入List<T>
:
List<String> stringList = new List<String>();
List<int> intList = new List<int>();
...
在编译时,泛型的值内置在代码中。 因此,如果您在上述示例中进行了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);
}
***但是,在编写此代码时,将参数value
作为泛型似乎是毫无意义的,因为它只是T GetLookupValue<T>(string sTName, string sFName, string sLuName, object value);
为object
...。它们也可能已经使它成为T GetLookupValue<T>(string sTName, string sFName, string sLuName, object value);
。 (这允许最终将值对象装箱(即,int,double等)
我怎么称呼这个方法?
这将取决于您要使用的类型。 例如:
int result = GetLookupValue<int, string>("tname", "fname", "luname", "some value");
类型T和S是类型。 要调用此方法并存储结果,请使用:
SomeClass returnedObject = GetLookupValue<SomeClass, SomeOtherType>("", "", "", "");
该方法将返回与您为T输入的值等效的类型。
看来T是您的返回类型,而S是内部用作某些值的类型。
因此,您需要为T和S指定TYPES,因此:
SomeType result = GetLookupValue<SomeType, SomeValueType>(...);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.