我不知道如何正确地表达这个问题,所以我无法用谷歌搜索。
有这样一个类
public class Some<T>
//where T : class
{
public T[] Variable;
}
还有另一个包含字典的:
class Another
{
public IDictionary<Type, Some<???>> Somes;
}
相反???,需要不同的类型。可以为???(或接口)创建一个抽象类,将其写在where T : IThird. 但我需要能够创建Some<float>. 解决办法是什么?
可以不受限制地更新where(因为float它不起作用),但主要问题仍然悬而未决。更改了代码。
PS
我做不到class Another<T>- 因为。在字典中可以并排放置andSome<int>和Some<float>。
C# 中的泛型在使用时需要明确的类型规范,具体类型替换将泛型转换为唯一类型。
Some<int>并且Some<float>是两种不同的类型。您不能仅仅因为没有这种类型就声明类型为“any Some”的变量。如果您的代码期望来自 all 的某种通用行为
Some,而不是绑定到特定类型 T - 您应该将此行为移至 Some 父类,或移至将在Some<T>. 并使用界面,而不是“任何Some”如您所知,有引用类型和值类型。您在 Some 类中的约束表示您将用引用类型替换 T。Float 是一种值类型。您要么需要将条件从 where: class 更改为 where : struct 以替换那里的值类型。什么是任务,你能更具体地描述一下吗?
因为 有一个问题的订阅者,我将添加一个我自己的答案。
我现在是如何摆脱困境的(你将不得不使用类型转换):
那么在使用时就不会那么容易搞乱类型了:
是的,在这里你必须再次写
, float>,但如果你尝试替换不同的类型,它会在编译期间出错。还有一个很大的好处:那些。我设法摆脱了用户代码中的类型转换,但(到目前为止)不可能完全摆脱它。