【问题标题】:C# implicit operator generic minus/plus intC# 隐式运算符泛型减/加 int
【发布时间】:2022-01-03 15:21:50
【问题描述】:

我在 C# 中有这个课程:

public class MyClass<A, B> where B : OtherClass<A>
{
    [SerializeField] A _value = default;
        
    public A Value 
    {
        get => _value;
        set => _value = value;
    }

    public static implicit operator A(MyClass<A, B> variable)
    {
        return variable.Value;
    }
}

我真的很想能够做到这一点:

MyClass<int, OtherClass<int>> myVar = new MyClass<int, OtherClass<int>>();
myVar.Value = 5;
myVar -= 3; // this is actually not valid and I wish to make it valid.

有什么我不知道的方法吗?
如果您需要任何进一步的信息,请告诉我。

【问题讨论】:

  • 无论如何你只能使用有限数量的类型,所以也许你应该为它们创建单独的类型而忘记泛型

标签: c# generics type-conversion operator-keyword implicit


【解决方案1】:

不,这是不可能的。因为即使拥有 operator - 也没有接口,所以无法表示A 必须拥有operator -。并且随着这种可能性的消失,您将无法创建自己的 operator - 并调用 A 的运算符减号。

【讨论】:

  • 那是一团糟。我真的希望错过任何有关这方面的知识。无论如何都非常感谢。我会尽快接受。
  • 好吧,从技术上讲,您可以使用一些动态/反射魔法在A 上调用operator-,但我认为我们都同意不应该这样做.
  • 确实,您将失去对泛型的编译时支持。该解决方案虽然可能有效,但在不工作时将无法产生编译时错误。
  • @Heinzi 你也不能用反射来做,因为它们不是真正的函数- 根本,它是所有整数和浮点类型的编译器内在。
  • @Charlieface: Good point. dynamic 不过应该可以。 (同样,并不是说这是个好主意。)
猜你喜欢
  • 2015-12-07
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 2010-10-21
相关资源
最近更新 更多