C# 获取两个数组之间的所有字符串组合

标签 c# loops reflection .net-assembly

我有 2 个字符串数组:

string[] baseAssemblyNames

例如['Core', 'Web', 'Data']

string[] projectAssemblyNames

例如['Project1', 'Project2']

结果:

['Project1.Core', 'Project1.Web', 'Project1.Data', 'Project2.Core', 'Project2.Web', 'Project2.Data']

我想要这 2 个之间的所有组合,现在我正在使用 2 个 foreach 来迭代和组合它们。

foreach(var projectAsm in projectAssemblyNames)
{
    foreach(var baseAsm in baseAssemblyNames)
    {
        try
        {
            var asm = Assembly.Load($"{projectAsm}.{baseAsm}");
            asmList.Add(asm);
        }
        catch { }
    }
}

当我们有很多项目要加载程序集进行扫描时,在性能方面是否有更好的解决方案?

最佳答案

使用 LINQ 的简洁方法 ;)

var assemblies = projectAssemblyNames
    .Join(baseAssemblyNames, p => 1, b => 1, (p, b) => $"{p}.{b}")
    .Select(Load)
    .Where(assembly => assembly != null)
    .ToList();

Assembly Load(string assembly) 
{
    try
    {
        return Assembly.Load(assembly);
    }
    catch 
    { 
        return null; // Not found
    }
}

关于C# 获取两个数组之间的所有字符串组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58034101/

相关文章:

c# - 处理 Control.Checked 状态在表单之间传递的最佳方式

java - 获取字段名称

go - Golang中如何动态调用结构体的所有方法?

postgresql - 通过 postgresql 循环获取活跃行程的数量

java - Zip4j 成功提取吗?

python - CS Circles 部分 7C 编码练习 : One Triangle 中的循环

c# - 如何使用从程序集动态加载的接口(interface)并调用其成员

c# - SqlParameter 的正确语法

c# - 如何创建指向已保存为 SQL 表内存流的文件的链接?

c# - 在不同的程序集上从上下文启用迁移