C# 如何在T:struct中创建泛型类的动态列表?
我在创建泛型类型列表时遇到了一个问题,其中类型参数是动态的,并且是结构化的。我认为最好在这里举个例子C# 如何在T:struct中创建泛型类的动态列表?,c#,generics,dynamic,struct,C#,Generics,Dynamic,Struct,我在创建泛型类型列表时遇到了一个问题,其中类型参数是动态的,并且是结构化的。我认为最好在这里举个例子 public class Container { public List<B<dynamic>> someList = new List<B<dynamic>>(); public void AddToList(Type type) { var genericType = typeof(B<>)
public class Container
{
public List<B<dynamic>> someList = new List<B<dynamic>>();
public void AddToList(Type type)
{
var genericType = typeof(B<>);
var generic = genericType.MakeGenericType(type);
someList.Add(Activator.CreateInstance(generic) as B<dynamic>);
}
}
public class B<T> where T : struct
{
}
我怎样才能让这样的东西在没有
错误CS0453:类型“dynamic”必须是不可为null的值类型,才能将其用作泛型类型或方法“B”中的参数“T”
场景是为我的游戏制作物品系统。游戏本身是实体-组件系统架构,所以游戏中的所有东西都是具有某些组件结构的实体。我正在制作一个Item类,它是ScriptableObjectsort模板,可以保存到xml文件中。我希望Item的每个实例都具有此特定于项的组件,其中包含特定于项的值。但问题是,我不希望该项的每个实例都相同,但我希望该项在指定范围内具有一些随机值。我这样做是为了在我的示例中该项具有ComponentSetupB列表,该列表采用ComponentStructs,并使用反射为每个组件具有的属性创建最小/最大值。在项目中,我需要访问ComponentSetup的一些函数,所以我需要创建ComponentSetup的列表,但不能将其指定为ComponentSetup
public class B<T> where T : struct
{
public dynamic GetDynamic()
{
return this;
}
}
我知道这是线程necro,但为了OP的利益和任何遇到同样情况的人,我试图实现与OP完全相同的事情。 以下是我如何在游戏中解决和实施此问题的: Unity的文件是单脚本,因此不是真正有效的类型。当我们将脚本或游戏对象拖到检查器时,Unity使用反射从脚本中提取有用的类型和方法 MonoScript提供了GetClass,它返回在中定义的类或结构,但是有一个错误报告,如果该结构是在命名空间中定义的,则返回错误-在我的例子中,它返回null: 因此,对于任何试图实现类似功能的人,如果希望将通用对象作为自定义脚本组件结构传递或填充组件列表,请将条目强制转换为MonoScript并调用GetClass,以避免在命名空间中定义类型。以下是一些PSEDOO实现,以供澄清: //假设从列表中检索组件列表 componentList中的foreach条目{ 类型ComponentType=作为MonoScript.GetClass的条目; var component=Activator.CreateInstanceComponentType; entity.AddComponentcomponent; }
为什么您需要B的类型参数是动态的?为什么您认为动态是一个结构?动态是一个奇特的词,用于对象加上调用站点上的do magic-它永远不会是结构,也不能是结构。您在这里尝试使用的实际场景是什么?如果我们理解这个场景,我们可能会提供更好的指导。我需要一个通用类B的列表,但是有多个不同的参数structs@MarcGravell我知道什么是动态的,我知道我不能在这种情况下使用它,但除了结构,还有什么类似于动态的吗?