C#中单个方法/函数返回多个参数

在C#中,如果一个方法如 GetDllPath() 需要返回两个字符串,以下是常见的几种方法及其示例:

使用元组(Tuple)

推荐这种方式

// 定义返回元组的方法
public (string path1, string path2) GetDllPath()
{
    string p1 = "C:\\Path1\\file.dll";
    string p2 = "C:\\Path2\\file.dll";
    return (p1, p2);
}

// 调用方法
public void AnotherFunction()
{
    // 接收返回值
    var paths = GetDllPath();
    
    // 使用返回值
    string firstPath = paths.path1;
    string secondPath = paths.path2;
    
    Console.WriteLine($"Path1: {firstPath}, Path2: {secondPath}");
    
    // 或者直接解构
    (string path1, string path2) = GetDllPath();
    Console.WriteLine($"解构结果: {path1}, {path2}");
}

使用out参数

public void GetDllPath(out string path1, out string path2)
{
    path1 = "C:\\Path1\\file.dll";
    path2 = "C:\\Path2\\file.dll";
}

public void AnotherFunction()
{
    GetDllPath(out var p1, out var p2);
    Console.WriteLine($"Path1: {p1}, Path2: {p2}");
}

使用自定义类/结构体

public class DllPaths
{
    public string Path1 { get; set; }
    public string Path2 { get; set; }
}

public DllPaths GetDllPath()
{
    return new DllPaths 
    {
        Path1 = "C:\\Path1\\file.dll",
        Path2 = "C:\\Path2\\file.dll"
    };
}

public void AnotherFunction()
{
    var paths = GetDllPath();
    Console.WriteLine($"Path1: {paths.Path1}, Path2: {paths.Path2}");
}

使用数组或列表

(不太推荐,可读性差)

public string[] GetDllPath()
{
    return new string[] { "C:\\Path1\\file.dll", "C:\\Path2\\file.dll" };
}

public void AnotherFunction()
{
    var paths = GetDllPath();
    Console.WriteLine($"Path1: {paths[0]}, Path2: {paths[1]}");
}

最佳实践建议

  1. 推荐使用元组(第一种方法) - 语法简洁,C# 7.0+ 原生支持
  2. 如果需要更多功能或扩展性,使用自定义类(第三种方法)
  3. 只有在与旧API交互时才考虑使用 out 参数

选择哪种方式取决于你的具体需求:

  • 临时使用:元组
  • 需要复用或添加更多功能:自定义类
  • 需要与现有API兼容:out 参数