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