C# 如何在不使用泛型的情况下生成泛型变量?

C# 如何在不使用泛型的情况下生成泛型变量?,c#,generics,C#,Generics,我有一个通用类 class ComputeScalar<T> : IComputeVariable where T : struct { // This is why i have to use generics. ComputeBuffer<T> buffer; T data; } class ComputeArray<T> : IComputeVariable where T : struct { // This is why

我有一个通用类

class ComputeScalar<T> : IComputeVariable where T : struct
{
   // This is why i have to use generics.
   ComputeBuffer<T> buffer;

   T data;
}

class ComputeArray<T> : IComputeVariable where T : struct
{
   // This is why i have to use generics.
   ComputeBuffer<T> buffer;

   T[] data;
}
class ComputeScalar:IComputer变量,其中T:struct
{
//这就是为什么我必须使用泛型。
计算机缓冲区;
T数据;
}
类ComputeArray:IComputeVariable,其中T:struct
{
//这就是为什么我必须使用泛型。
计算机缓冲区;
T[]数据;
}
我在另一个类的列表中使用这个类

class SomeClass
{
   List<IComputeVariable> variables;
}
class-SomeClass
{
列出变量;
}
我创建接口是因为在C#中,我们不能将泛型类用于类型参数。(对吗?)我想学习的是如何让数据成为interface的一员?在运行时如何确定数据类型?
(数据可以是任何值类型)

您只能通过将
数据弱类型化为
对象,使其成为接口的成员:

public interface IComputeVariable
{
    object Data { get; }
}
(请注意,它必须是属性-不能在接口中指定字段。)

然后,您可能希望在
ComputeScalar
中显式地实现这一点,以避免在强类型版本可用的地方使用弱类型版本

另一种方法是使接口通用,并且
SomeClass

class SomeClass其中T:struct
{
列出变量;
}
我们对您的情况了解不够,无法知道哪种方法是正确的,但这是您的两个选择。

接口ICompute变量,其中t:struct
interface IComputeVariable<T> where T : struct
{
  T Data { get; }
}

class ComputeScalar<T> : IComputeVariable<T> where T : struct
{
   // This is why i have to use generics.
   ComputeBuffer<T> buffer;

   public T Data {get; set; }
}
{ T数据{get;} } 类ComputeScalar:IComputer变量,其中T:struct { //这就是为什么我必须使用泛型。 计算机缓冲区; 公共T数据{get;set;} }
缓冲区用于向gpu发送数据,必须是通用的。所以,第二种选择不是一个选项,因为我需要向gpu发送不同类型的变量。列表必须是通用的。但我会先试试。非常感谢你。
interface IComputeVariable<T> where T : struct
{
  T Data { get; }
}

class ComputeScalar<T> : IComputeVariable<T> where T : struct
{
   // This is why i have to use generics.
   ComputeBuffer<T> buffer;

   public T Data {get; set; }
}