gpt4 book ai didi

C# 确保自定义强制转换在迭代父类(super class)型列表时使用父类(super class)型的子类型

转载 作者:太空宇宙 更新时间:2023-11-03 22:14:35 25 4
gpt4 key购买 nike

我有以下代码。我的意图是可以使用语法将此自定义对象强制转换为 Int32 类型

i = (int) 对象;

其中“obj”属于“SubClass”类型。

用于转换的运算符在抽象父类(super class)型的每个子类型中定义,也在抽象父类(super class)型中定义。由于抽象父类(super class)型中的运算符不能标记为虚拟,因此从父类(super class)型进行强制转换会导致抛出异常。

如果我尝试在 foreach 循环中进行转换,其中循环遍历“SuperType”类型的列表,C# 尝试使用 SuperType 上的运算符进行转换(并抛出编程的异常),我希望它使用运营商

我希望它会使用子类型进行转换。

我可能会以艰难的方式解决这个问题,但现在我很想知道我是否可以通过我认为是优雅的解决方案来实现这一目标。

感谢任何建议!

//循环...

foreach (PriceIndexAction objs in objList)
{
int i = (int) action;
}

//父类(super class)..

   public abstract class SuperClass
{

protected SuperClass( DateTime p1, int p2, int p3, int p4 )
{
....
}

public static implicit operator Int32(PriceIndexAction obj)
{
throw new InvalidCastException( "No cast to System.Int32 exists for the abstract class PriceIndexAction.");
}
}

//子类..

public class SubClass : SuperClass
{

public SubClass(DateTime p1, int p2 )
: base( p1, p2, 1, 2 )
{
....
}


public static implicit operator Int32(SubClass obj)
{
return 2;
}
}`enter code here`

最佳答案

public abstract class SuperClass
{
public static implicit operator int(SuperClass obj)
{
return obj.ToInt32();
}

protected abstract int ToInt32();
}

然后在派生类中覆盖/实现 ToInt32

关于C# 确保自定义强制转换在迭代父类(super class)型列表时使用父类(super class)型的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5501783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com