1
2
没有我想的那么完美…但是如果
|
2
5
考虑在这种情况下使用继承。我想是的
这将输出:
对于新的支持类型,您可以:
特别是对于3)这将大大减少方法的爆炸。现在你写一个单曲
|
3
4
你在这里的真正问题很可能是设计问题,而不是一般性的问题。仿制药应该用于那些实际上是不可知论类型的东西,而不是作为一种让生活变得更容易的“一网打尽”。也许可以尝试发布一些您正在使用的实际示例代码,而有些人可能会对如何重新设计解决方案有一个想法,使您能够在不太头疼的情况下对其进行扩展。 作为一个取笑者,考虑这样的事情:
你可以这样称呼它:
我在这里使用了lambda表达式,但您也可以轻松地预先定义一些
|
4
1
使用对象列表。 在计划时参数数量未知的情况下,只需使用对象列表即可。类似:
(假设你有
所以你可以打电话给:
对于任何类型的组合,因为每个引用都是从对象派生的(对象的类型可能比所需的类型多得多,比如int和string,但在将来支持更多其他类型可能很方便)。 这是可能的,因为您可以在运行时使用反射来识别类型。 另一种执行操作序列的方法是使用接口,定义在特定条件下对特定对象执行的操作。
但是通过这种方式,您必须将p1和p2(同时也是p3)建模为实现接口的对象,这是不可能的。 |
5
1
我本可以这样做作为对@smink的评论,但我没有足够的代表…… 如果将param基类扩展为具有隐式运算符,则返回到不必在代码中包装内容(尽管运行时仍会产生包装开销)。
|
6
1
如果您使用的是C/.NET 4.0,那么您可以使用动态特性实现多个分派,因此您只需要根据参数的数量实现g的单个重载,并且在每个g实现中按类型正确的foo/bar/baz重载将在运行时得到解决。
编辑: 即使您不能使用C/.NET 4.0,您仍然可以使用反射方法。我为double添加了另一个foo/bar/baz重载,显示了这种通用化的效果,并允许您消除重复的g实现。
|
7
0
不幸的是,泛型无法处理这种情况。至少,不太好。如果将方法设为泛型,则可以将几乎任何类型的方法传递给它们。对于泛型,没有足够的WHERE子句将其限制为string和int。如果您的方法要在其中执行特定的int/string相关操作,那么泛型根本就不起作用。 C语言中的泛型不像C++中的模板那么强大,是的,它们有时会引起一些重大的头痛。只是需要时间去适应他们,去感受他们能做和不能做的事情。 |
8
0
这可能有点费劲,但是在类工作时封装不同的参数类型吗?:
然后在某个地方有一些G方法:
然后你可以打电话给:
|
9
0
您可以使用代码生成来解决这个问题。 看 Reflection.Emit . 您还可以使用 T4 在Visual Studio中。 这些类型真的妨碍了这里的发展。您还可以尝试使用动态语言或C 4动态关键字来解决这个问题。 |
10
-1
如果您使用的是C 4.0,则可以使用选项参数进行此操作。 或者可以使用对象
或者可以使用泛型方法
|
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
Dansih · .Net核心自定义身份验证方案 2 年前 |
lolorekkk · 面板插入。NET WinForm 2 年前 |