|
|
1
2
另一种方法是,这次在组合中进行一些思考:
下一步将尝试实现
全参数类型匹配等。 |
|
|
2
5
问题是,任何地方都没有在接口或基类上定义typarse,因此不能假定传递到类中的类型将具有该函数。除非你能以某种方式克服困难,否则你会遇到很多困难。 |
|
|
3
3
简短的回答,你不能。 答案很长,你可以作弊:
我制作了一个静态字典,其中包含我可能想要使用的每种类型的台盼方法的委托。然后我编写了一个通用方法来查找字典并将调用传递给适当的委托。因为每个委托都有不同的类型,所以我只将它们存储为对象引用,并在检索它们时将它们转换回适当的泛型类型。请注意,为了一个简单的示例,我省略了错误检查,例如检查给定类型的字典中是否有条目。 |
|
4
3
要访问特定类或接口的成员,需要使用Where关键字并指定具有该方法的接口或基类。 在上面的实例中,typarse不是来自接口或基类,因此您试图在上面做的事情是不可能的。最好只使用convert.changetype和try/catch语句。
|
|
|
5
2
好的,伙计们:谢谢你们的鱼。现在就来看看你的答案和我的研究(尤其是关于 limiting generic types to primitives )我将向你介绍我的解决方案。
|
|
|
6
1
你想这样做吗?
不幸的是,你不能检查胰蛋白酶模式,因为它是静态的——这很不幸地意味着它不特别适合于仿制药。 |
|
|
7
1
唯一的方法就是使用反射来检查是否存在t的方法。 另一个选项是通过将类型限制为IConvertible(所有基本类型都实现IConvertible),确保您发送的对象是可转换的对象。这将允许您非常灵活地将参数转换为给定的类型。
您也可以通过使用“对象”类型来对此进行更改,而不是像最初那样。
|
|
|
8
1
这不是一个真正的解决方案,但在某些情况下,它可能是一个很好的替代方案:我们可以向泛型方法传递一个额外的委托。 为了阐明我的意思,让我们用一个例子。假设我们有一些通用的工厂方法,它应该创建一个T的实例,然后我们希望它调用另一个方法,用于通知或附加初始化。 考虑以下简单类:
以及以下静态方法:
所以现在我们要做的是:
但是,我们可以更改方法以接受其他委托:
现在我们可以将呼叫更改为:
显然,这只在非常具体的场景中有用。但从我们获得编译时安全性的角度来看,这是最干净的解决方案,不涉及“黑客攻击”,而且代码非常简单。 |
|
|
9
0
你可能做不到。 首先,如果可能的话,您需要在t上有一个更严格的界限,这样类型检查器可以确保所有可能的t替换实际上都有一个名为typarse的静态方法。 |
|
|
10
0
你可能想在上阅读我以前的文章 limiting generic types to primitives . 这可能会给您一些指针来限制可以传递给泛型的类型(因为 类型解析 显然只对一组基元可用( 特里帕斯 显然是例外,这是不合理的)。 一旦对类型有了更多的句柄,就可以尝试解析它了。你可能需要一个难看的开关 三分法 )但我认为您可以实现所需的功能。 如果您需要我进一步解释上述任何一项,请问:) |
|
|
11
0
最佳代码:将t限制为valuetype,方法如下:
这里的“struct”表示值类型。 字符串是类,而不是值类型。 int、float和enum都是值类型。 btw编译器不接受调用静态方法或访问“类型参数”上的静态成员,如以下示例中不会编译的那样:(
=>错误1“t”是“类型参数”,在给定上下文中无效 SL。 |
|
|
12
-1
静力学不是这样工作的。您必须将静态看作是全局类中的一种,即使它们分布在一系列类型中。我的建议是使它成为T实例内可以访问必要静态方法的属性。 另外,T是某个对象的实际实例,和其他任何实例一样,您不能通过实例化的值访问该类型的静态。下面是要做什么的示例:
|