gpt4 book ai didi

c# - 有没有办法转换类型参数?

转载 作者:太空狗 更新时间:2023-10-29 20:27:18 25 4
gpt4 key购买 nike

我可以在没有反射的情况下使用类型参数在运行时实现特定接口(interface)吗?以下伪代码是我想要做的。

void Run1<T> ()
{
// ...
if (typeof (IEnumerable).IsAssignableFrom (typeof (T)) {
Run2<T implementing IEnumerable> (); // <- use T as implementing IEnumerable
}
// ...
}

void Run2<T> () where T : IEnumerable
{
// ...
}

最佳答案

不,我不相信有一种简单的方法可以做到这一点。

如果您控制了所有代码,您可以拥有一个带有约束的公共(public)版本的Run2,但是一个私有(private)没有约束的 Run2 的实现,您从 Run1 调用:

public void Run1<T>()
{
// ...
if (typeof(IEnumerable).IsAssignableFrom(typeof(T))
{
Run2Impl<T>();
}
// ...
}

public void Run2<T>() where T : IEnumerable
{
Run2Impl<T>();
}

private void Run2Impl<T>()
{
// Need to cast any values of T to IEnumerable here
}

关于c# - 有没有办法转换类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29982463/

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