使用T作为已知结构的泛型类型?

时间:2015-05-03 23:22:39

标签: c# generics struct

好吧,所以我有一个已知的结构,这意味着,我已经在这个结构中有成员...但是,我有其他结构,我想在1函数调用中使用。

这是某个类中函数的声明:

public void OpenFile<T, F, U>(ref T body, ref F recordMap, ref U records);

这是对其他课程中函数的调用:

OpenFile<SomeStructure1, SomeStructure2, SomeStructure3>(ref someStructureBodyDefinition, ref someStructureRecordMapDefinition, ref someStructureRecordsDefinition);

所以,把它全部抛弃:

我可以在泛型类型中使用ANY结构进行函数调用吗?如果有,你能告诉我如何在函数内使用结构的成员吗?

1 个答案:

答案 0 :(得分:2)

  

我可以在泛型类型中使用ANY结构进行函数调用吗?如果有,你能告诉我如何在函数内使用结构的成员吗?

好的,基于编辑过的问题,您似乎正在尝试了解如何使用泛型方法的参数实例,其中该参数的类型是方法的类型参数之一。

为此,您需要能够使用约束来推广该类型参数。由于我们在这里谈论一个值类型(即ggplot(vec2df,aes(seq_along(vec2),vec2))+geom_bar(stat="identity", fill=c("red","blue","green","yellow"))+ geom_errorbar(aes(ymin=vec2-sd, ymax=vec2+sd), width=.2,position=position_dodge(.9), legendPosition="top") ),唯一可能的泛化是类型实现接口,并且该接口在方法上作为约束声明。

E.g:

struct

如果您将使用不同的类型参数调用此方法,其中类型实际上实现了一个公共接口,但实际上并没有这样声明(例如,所有结构都实现了interface ISomeInterface { void M1(); string P1 { get; } } struct MyStruct : ISomeInterface { /* ... */ } void Method<T>(T t) where T : ISomeInterface { // can call M1: t.M1(); // can get property value P1: string text = t.P1; } 方法,但是没有M1()和/或部分或全部结构体未声明为实现此类接口),然后您可以使用ISomeInterface代替使该参数完全使用泛型类型参数,或者将传入的值分配给dynamic局部变量并使用它。

如果没有办法概括所使用的类型,那么你应该重新考虑一般的方法是否真的是一个好的设计。可能不是那种情况。