2012-08-15 70 views
1

这是C#中的一段代码,我试图理解它。 一个类在接口中有以下方法可用。在C#中调用方法class

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代替什么?

+2

我看不出有任何通用的约束等等,任何东西。那会导致运行时错误不是完全是另一个问题。 – asawyer 2012-08-15 17:34:00

+0

你可以在这里替换任何东西。 – Ankush 2012-08-15 17:35:03

回答

2

该方法表现为广义查找功能。如果实现真正能够处理任何类型的,那么你可以使用任何类型的在所有的S和T

例子:

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

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

Here is a great introduction to C# generics,这是这是什么。

基本上,你只需用任何你想要的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作为通用似乎相当没有意义的,因为它仅仅是投到object ....他们可能已经使它T GetLookupValue<T>(string sTName, string sFName, string sLuName, object value);。 (它允许最终拳击值对象(即整型,双等)

1

如何调用该方法

这将取决于您要使用什么类型的?例如:

int result = GetLookupValue<int, string>("tname", "fname", "luname", "some value"); 
1

类型T及S类型为了调用此方法,并存储结果,可以使用:

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

该方法将返回一个类型,与您输入的T相同。

1

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

所以,你需要指定类型T和S,正是如此:

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