如何确定变量类型是否支持C#中的给定运算符

时间:2013-03-06 18:39:04

标签: c# operators

我有这个问题:

我想创建一个支持+, - ,*,/运算符的泛型类。例如Matrice类。问题是,一些数据类型支持所有上述运算符,一些支持部分数据类型,一些数据类型根本不支持它们。我想让我的班级认识到上述哪些操作符受支持,如果不支持其中一些操作符,我希望看到 COMPILE TIME 错误。

示例:

Matrice<int>:我们可以做+, - ,/,*因为int有这些运算符重载/定义

Matrice<string>:我们只能做+,因为字符串只有+重载/定义,如果我们尝试
Matrice<string> a = new Matrice<string>;
Matrice<string> b = new Matrice<string>;
Matrice<string> c = a*b;
我们应该得到 COMPILE TIME 错误

Matrice<CustomClass>:如果CustomClass只有/和+重载(例如)Matrice<CustomClass>应仅支持/和+运算符

2 个答案:

答案 0 :(得分:4)

不幸的是,这是不可能的。运算符重载是静态的,因此您无法使用接口或继承来确保考虑运算符。查看更多here

答案 1 :(得分:2)

这在C#中是不可能的。您将需要使用某种传统方法或委托来指示如何为每个项目“添加”“减去”等。