如何获取和使用每个列表成员的索引

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取和使用每个列表成员的索引相关的知识,希望对你有一定的参考价值。

我看过一些与此类似的帖子,但没有一个保存并以我想要的方式使用它。下面的方法接收不同大小的列表,我希望能够提示用户选择他们想要调用的列表成员,然后调用该成员。我知道这样做的唯一方法是使用列表中该成员的索引。

    private static void LoadAssemAndShowPublicTypes(String assemId)
    
        //Explicitly load an assembly into this domain
        Assembly a = Assembly.Load(assemId);
        //Execute this loop once for each type 
        //Publicly exported from the loaded assembly 
        List<Type> currentAssemblyTypes = new List<Type>();
        int i = 0;
        foreach (Type t in a.ExportedTypes)
        
            //Display the full name of the type
            currentAssemblyTypes.Add(t);
            Console.WriteLine($"i - t.FullName");
            i++;
        
        foreach (var t in currentAssemblyTypes)
        
            Console.WriteLine($"i - t.FullName");
            Console.WriteLine("Which one(s) would you like to Invoke?");
            String userChoice = Console.ReadLine();
            List<string> userChoices = new List<string>();
            userChoices.Add(userChoice);
            // pass the member(s) of currentAssemblyType that corresponds to the number(s) user chose 
            // to InvokeTypesRequested() method
        
        //Console.ReadLine();
    
    private static void InvokeTypesRequested(List<Type> requestedTypes)
    

    

我设法逃避“我”,但我不知道如果我想在另一种方法中使用currentAssemblyTypes的第二个成员来调用它,这对我有用。因此,如果第二个成员是myClass,我想调用该类,然后继续与用户交互以访问myClass的类型。我只谈论索引,因为这是我能想到实现这一目标的唯一方法。我假设有一个LINQ语句对我有用。只是不确定如何。我更新了上面的代码;希望它提供了我正在尝试做的更多背景。非常感谢。

答案

很难从你的代码中判断出你正在尝试完成什么,但看起来你正在寻找Activator。但是如果没有接口或进一步的反射,您将获得的所有内容都是类的实例,而不知道该实例中可用的函数是什么。也就是说,下面的代码将obj设置为传递给LoadAssemAndShowPublicTypes的程序集名称中所请求类的实例。

using System;
using System.Collections.Generic;
using System.Reflection;

class Program

    static void Main(string[] args)
    
        LoadAssemAndShowPublicTypes("Assembly Name Here");
    

    private static void LoadAssemAndShowPublicTypes(String assemId)
    
        Assembly a = Assembly.Load(assemId);
        List<Type> currentAssemblyTypes = new List<Type>();
        int i = 0;
        foreach (Type t in a.ExportedTypes)
        
            currentAssemblyTypes.Add(t);
            Console.WriteLine($"++i - t.FullName");
        

        Console.WriteLine("Which one(s) would you like to Invoke?");
        String userChoice = Console.ReadLine();
        if (userChoice != "0")
        
            CreateInstance(currentAssemblyTypes[Convert.ToInt32(userChoice) - 1]);
        
    

    private static void CreateInstance(Type requestedType)
    
        Object obj = Activator.CreateInstance(requestedType);
    

以上是关于如何获取和使用每个列表成员的索引的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 获取列表列表中最大列表的索引?

如何在 RN 平面列表中获取当前可见的索引

如何在 Qt 中获取选定的列表项索引

如果 pandas 系列的值是一个列表,如何获取每个元素的子列表?

如何获取列表的最后一个索引?

如何获取 QListWidget::selectedItems() 的索引?