Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “泛型和错误”;无法将TypeX转换为TypeY“;_C#_Generics_Casting - Fatal编程技术网

C# “泛型和错误”;无法将TypeX转换为TypeY“;

C# “泛型和错误”;无法将TypeX转换为TypeY“;,c#,generics,casting,C#,Generics,Casting,我有下面的代码,我想将gVariable从UnsafeTypeName强制转换为SafeTypeName,虽然我刚刚得到一个错误,但无法在注释行上将UnsafeTypeName转换为SafeTypeName 尽管只有一个接口和类称为BetaMethods和ReleaseMethods,但实际上还有许多其他的“集合”,例如一个称为UntestedCharacterMethods和ReliableCharacterMethods,而另一个称为UntestedVehicleMethods和Reliab

我有下面的代码,我想将gVariable从UnsafeTypeName强制转换为SafeTypeName,虽然我刚刚得到一个错误,但无法在注释行上将UnsafeTypeName转换为SafeTypeName

尽管只有一个接口和类称为BetaMethods和ReleaseMethods,但实际上还有许多其他的“集合”,例如一个称为UntestedCharacterMethods和ReliableCharacterMethods,而另一个称为UntestedVehicleMethods和ReliableVehicleMethods“,尽管我只是在命名的BetaMethods和ReleaseMethods中保留了一组,以使这个问题变得简单。包装器的目的是使处理这些beta方法和发布方法变得更加容易

有人能提出一个解决办法吗?(在提供解决方案的代码中添加的注释)

非常感谢!:)

公共接口BetaMethods{
int GetNewCalculation();
}
公共类发布方法:BetaMethods{
public int GetNewCalculation(){
返回-1;
}
public int getReliableCountation(){
返回0;
}
}
公共接口安全包装器{
SafeTypeName GetSafeVersion();
}
//正如在给出的答案中指出的那样,失败的原因是UnsafeTypeName和SafeTypeName完全不相关。这是通过使用关键字修复的。
公共类UnsafeWrapper:SafeWrapper,其中UnsafeTypeName:SafeTypeName{
私有非安全类型名称gVariable;
公共安全类型名称GetSafeVersion(){
//错误落在这一行上。
返回(SafeTypeName)gVariable;
}
public UnsafeTypeName GetUnsafeVersion(){
返回变量;
}
}

类型铸造在继承继承继承权范围内工作。如果类型不相关,则转换将不起作用。

类型转换在继承继承继承权范围内起作用。如果类型不相关,则转换将不起作用。

因为
SafeTypeName
UnsafeTypeName
之间没有关系。在代码中,它们都是不相关的类型

如果要在这两者之间强制继承,可以使用泛型约束()

更具体地说,如果您像这样存储它,它可能会工作:

public class UnsafeWrapper<UnsafeTypeName, SafeTypeName>:SafeWrapper<SafeTypeName> where SafeTypeName : UnsafeTypeName
public类UnsafeWrapper:SafeWrapper其中SafeTypeName:UnsafeTypeName

因为
SafeTypeName
UnsafeTypeName
之间没有关系。在代码中,它们都是不相关的类型

如果要在这两者之间强制继承,可以使用泛型约束()

更具体地说,如果您像这样存储它,它可能会工作:

public class UnsafeWrapper<UnsafeTypeName, SafeTypeName>:SafeWrapper<SafeTypeName> where SafeTypeName : UnsafeTypeName
public类UnsafeWrapper:SafeWrapper其中SafeTypeName:UnsafeTypeName

除非使用类型批注,否则无法强制转换:

public class UnsafeWrapper<UnsafeTypeName, SafeTypeName> 
        where UnsafeTypeName : SafeTypeName
    {

        private UnsafeTypeName gVariable;

        public SafeTypeName GetSafeVersion()
        {
            //Error falls on this line.
            return (SafeTypeName)gVariable;
        }

        public UnsafeTypeName GetUnsafeVersion()
        {
            return gVariable;
        }

    }
公共类UnsafeWrapper
其中UnsafeTypeName:SafeTypeName
{
私有非安全类型名称gVariable;
公共安全类型名称GetSafeVersion()
{
//错误落在这一行上。
返回(SafeTypeName)gVariable;
}
public UnsafeTypeName GetUnsafeVersion()
{
返回变量;
}
}

除非使用类型批注,否则无法强制转换:

public class UnsafeWrapper<UnsafeTypeName, SafeTypeName> 
        where UnsafeTypeName : SafeTypeName
    {

        private UnsafeTypeName gVariable;

        public SafeTypeName GetSafeVersion()
        {
            //Error falls on this line.
            return (SafeTypeName)gVariable;
        }

        public UnsafeTypeName GetUnsafeVersion()
        {
            return gVariable;
        }

    }
公共类UnsafeWrapper
其中UnsafeTypeName:SafeTypeName
{
私有非安全类型名称gVariable;
公共安全类型名称GetSafeVersion()
{
//错误落在这一行上。
返回(SafeTypeName)gVariable;
}
public UnsafeTypeName GetUnsafeVersion()
{
返回变量;
}
}

非常感谢您的快速回答-我用您提供的信息更新了问题。非常感谢您的快速回答-我用您提供的信息更新了问题。非常感谢您的快速回答-我用您提供的信息更新了问题。非常感谢您的快速回答回答-我已使用您提供的信息更新了问题。感谢您的快速回答。:)谢谢你的快速回答。:)