Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将参数传递给Activator.CreateInstance<;T>;()依班级而定_C#_.net - Fatal编程技术网

C# 将参数传递给Activator.CreateInstance<;T>;()依班级而定

C# 将参数传递给Activator.CreateInstance<;T>;()依班级而定,c#,.net,C#,.net,我靠自己学习C#,记下了很多奇怪的东西,这一天对我来说真的很难。在第三个问题中(我在stackoverflow的任何书籍、网站或问题中都找不到答案),这可能是迄今为止最难的一个问题 现在我正在尝试创建一个随机项生成器,它将实例化3种可能的随机类:武器,工具和饮料 现在,我使用问题的正确答案生成一个项目: public void randomGenerate() { var runningAssembly = Assembly.GetExecutingAssembly(); va

我靠自己学习C#,记下了很多奇怪的东西,这一天对我来说真的很难。在第三个问题中(我在stackoverflow的任何书籍、网站或问题中都找不到答案),这可能是迄今为止最难的一个问题

现在我正在尝试创建一个随机项生成器,它将实例化3种可能的随机类:
武器
工具
饮料

现在,我使用问题的正确答案生成一个项目:

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;
    }
}