c# 同时返回字符串列表和泛型列表

Posted

技术标签:

【中文标题】c# 同时返回字符串列表和泛型列表【英文标题】:c# return both list of string and list of generic type 【发布时间】:2022-01-07 15:21:23 【问题描述】:

我需要从一个函数返回多个项目。我该怎么做?

public List<string> GetInfo()

    var result = new List<string>();

    return result;

我怎样才能退回这样的东西?基本上是字符串列表,也可能是泛型类型列表。

public List<string> GetInfo()

    var result = new List<string>();

    return result and someType;


public class someType

    public List<SomeOthertype> someOthertype  get; set; 

【问题讨论】:

【参考方案1】:

如果我理解正确,您可以尝试使用命名元组

public (List<string> result, List<SomeOthertype> other) GetInfo()

    var result = new List<string>();

    someType instance = new someType();

    //TODO: put relevant code here

    // we return both result and someOthertype in one tuple 
    return (result, instance.someOthertype);

用法:

var info = GetInfo();

var result = info.result;
var other = info.other;

【讨论】:

【参考方案2】:

我建议使用generic method 以便可以使用不同的类型:

public static (List<string>, List<U>) GetInfo<U>()

    var list = new List<string>();
    var another = new List<U>();
    //...
    return (list, another);

【讨论】:

【参考方案3】:

从 c# 7 开始,tuple value types 是从函数返回多个值的最简洁方式。

Pre c# 7 你可以使用out parameters

【讨论】:

以上是关于c# 同时返回字符串列表和泛型列表的主要内容,如果未能解决你的问题,请参考以下文章

关于 c# 接口和泛型的问题

使用 Kotlin 和泛型进行数据绑定。错误:不兼容的类型:对象无法转换为列表

C++ Primer 5th笔记(chap 16 模板和泛型编程)函数模板显式实参

lua迭代器和泛型for浅析

C# 中的多态、重载和泛型

C#方法重载和泛型接口