gpt4 book ai didi

c# - 将泛型类型隐式转换为非泛型等价物

转载 作者:行者123 更新时间:2023-11-30 20:05:54 24 4
gpt4 key购买 nike

给定以下类:

public abstract class MyRecordClass
{
public int id { get; private set; }
}

public class ExampleMyRecordClass : MyRecordClass {}

public enum SomeIntEnum : int {}

public class MyList<T, E> : IList<T>
where T : MyRecordClass
{

}

public class MyOtherClass
{
public void MyMethod(MyList<T, E> list) {}
}

,我想这样调用方法:

MyList<ExampleMyRecordClass, SomeIntEnum> myList;
MyOtherClass myOtherClass;

myOtherClass.MyMethod(myList);

但是,如果传递类型为 MyList<ExampleMyRecordClass, SomeIntEnum> 的列表,这实际上不会起作用。 ,因为隐式向上转换在泛型中不起作用。因为我真正想要的是属性 id , 我当然可以在 MyList<T, E> 中显式实现属性或方法返回包含此信息的新集合。

我更愿意做的是隐式完成此操作。有没有办法(可能是隐式运算符,或者在 MyList<T, E> 中实现的附加接口(interface))使这成为可能?

最佳答案

我不确定您到底在寻找什么,但如果您进行以下更改,它会编译并运行得很好:

public class MyOtherClass
{
public void MyMethod<T, E>(MyList<T, E> list) where T : MyRecordClass { }
}

您是否正在寻找 covariance

public class MyList<T, E> : IList<T>, IReadOnlyList<T>
where T : MyRecordClass
{
}

public class MyOtherClass
{
public void MyMethod(IReadOnlyList<MyRecordClass> list) { }
}

用法:

MyList<ExampleMyRecordClass, SomeIntEnum> myList;
MyOtherClass myOtherClass;

myOtherClass.MyMethod(myList);

IReadOnlyList<T> Interface :

public interface IReadOnlyList<out T> : IEnumerable<T>
{
int Count { get; }
T this[int index] { get; }
}

关于c# - 将泛型类型隐式转换为非泛型等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10400279/

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