C# 泛型类型到其他泛型类型的隐式运算符

问题描述 投票:0回答:1

我有一个具有泛型类型的 C# 类。我想要一个隐式运算符,它将此类的实例转换为具有另一个泛型类型参数的同一类的实例。

class MyClass<T>
{
    public static implicit operator MyClass<TOther>(MyClass<T> self)
    {
        /* conversion */
    }
}

但是 C# 编译器显示“无法找到类型或命名空间名称 'TOther'”。

有办法实现我的目标吗?

c# generics operator-keyword
1个回答
0
投票

您的代码的问题是您尝试使用未在类 (MyClass) 范围内定义的泛型类型参数 (TOther)。编译器无法推断 TOther 应该是什么类型,因此会给出错误。

为了实现您的目标,您需要在类级别或方法级别定义泛型类型参数 TOther。例如,您可以这样做:

// Define TOther at the class level
class MyClass<T, TOther>
{
public static implicit operator MyClass<TOther, T>(MyClass<T, TOther> self)
{
// conversion
}
}
// Define TOther at the method level
class MyClass<T>
{
public static implicit operator MyClass<TOther>(MyClass<T> self) where TOther : new()
{
// conversion
}
}

注意,在这两种情况下,你都需要对泛型类型参数 TOther 指定一些约束,否则编译器将不允许你在隐式运算符中使用它。例如,您可以使用 new() 约束来指示 TOther 必须具有无参数构造函数,或者可以使用类约束来指示 TOther 必须是引用类型。

© www.soinside.com 2019 - 2024. All rights reserved.