C# 将参数传递给Activator.CreateInstance<;T>;()依班级而定
我靠自己学习C#,记下了很多奇怪的东西,这一天对我来说真的很难。在第三个问题中(我在stackoverflow的任何书籍、网站或问题中都找不到答案),这可能是迄今为止最难的一个问题 现在我正在尝试创建一个随机项生成器,它将实例化3种可能的随机类:C# 将参数传递给Activator.CreateInstance<;T>;()依班级而定,c#,.net,C#,.net,我靠自己学习C#,记下了很多奇怪的东西,这一天对我来说真的很难。在第三个问题中(我在stackoverflow的任何书籍、网站或问题中都找不到答案),这可能是迄今为止最难的一个问题 现在我正在尝试创建一个随机项生成器,它将实例化3种可能的随机类:武器,工具和饮料 现在,我使用问题的正确答案生成一个项目: public void randomGenerate() { var runningAssembly = Assembly.GetExecutingAssembly(); va
武器
,工具
和饮料
现在,我使用问题的正确答案生成一个项目:
public void randomGenerate()
{
var runningAssembly = Assembly.GetExecutingAssembly();
var itemType = typeof(Item);
List<Type> allItemTypes = runningAssembly.GetTypes().Where
(
type => itemType.IsAssignableFrom(type)
).ToList();
int randomIndex = RandomNumberGenerator.NumberBetween(0, allItemTypes.Count);
var selectedType = allItemTypes[randomIndex];
var selected = (Item)Activator.CreateInstance(selectedType);
}
并从每个列表(对象内)传递一个随机元素:
为什么会有这两种说法?因为它们是创建饮料所必需的:
class Beverage : item
{
public string Flavor { get; set; }
public Beverage
(
string name,
string flavor
) : base(name)
{
Flavor = flavor;
}
}
我知道如何生成这些随机元素,因此主要的两个问题是:
1) 将财产清单存放在某个地方,以便我能够找到它们
2) 获取这些列表(取决于所选的类),生成一个将存储所有必需参数的对象(我知道如何生成此对象),并将该对象作为Activator.CreateInstance()
参数传递。如果您使用的是c#7或更高版本,则可以使用“is”操作符来了解所选的类型。
您可以在此处找到参考资料:
如您所知,您可以使用不同的参数实例化所选的类型
对于较旧版本的C#,可以使用“typeof”实现这一点。如果使用的是C#7或更高版本,则可以使用“is”操作符了解所选的类型。
您可以在此处找到参考资料:
如您所知,您可以使用不同的参数实例化所选的类型
对于旧版本的C#,您可以使用“typeof”实现这一点
Object[] args = { nameIndex, flavorIndex };
class Beverage : item
{
public string Flavor { get; set; }
public Beverage
(
string name,
string flavor
) : base(name)
{
Flavor = flavor;
}
}