如何从一个方法返回多个变量?
本文关键字:方法 返回 变量 一个 | 更新日期: 2023-09-27 18:02:03
此方法只返回进程文件名:
public static string GetProcessInfo(IntPtr hwnd)
{
uint pid = 0;
GetWindowThreadProcessId(hwnd, out pid);
Process proc = Process.GetProcessById((int)pid);
return proc.MainModule.FileName.ToString();
}
但是我还想返回进程名:
proc.ProcessName;
我相信你有四个选择(按优先顺序)
- 直接返回
proc.MainModule
,并从调用方提取必要的信息。
public static ProcessModule GetProcessInfo(IntPtr hwnd){int pid = 0;gettwindowthreadprocessid (hwnd, out pid);Process Process = Process. getprocessbyid ((int)pid);返回proc.MainModule;} 之前
- 创建一个包含两个值的类并返回
- 从方法
Tuple<string, string>
返回一个元组
public static Tuple<string;GetProcessInfo>之前
- 在你的方法上创建2个
out
参数(我从未见过两个out参数实现,我不鼓励这样做,因为肯定有味道,但这是c#提供的一个选项)
string GetProcessInfo(IntPtr hwnd, out fileName, out processName)
您可以创建并返回一个描述结果的对象:
public class ProcessInfo
{
public string ProcessName { get; set; }
public string FileName { get; set; }
}
public ProcessInfo GetProcessInfo(IntPtr hwnd)
{
uint pid = 0;
GetWindowThreadProcessId(hwnd, out pid);
Process proc = Process.GetProcessById((int)pid);
return new ProcessInfo
{
FileName = proc.MainModule.FileName.ToString(),
ProcessName = proc.ProcessName
}
}
或者(我个人不太喜欢这个),一个Tuple<string, string>
:
public Tuple<string, string> GetProcessInfo(IntPtr hwnd)
{
uint pid = 0;
GetWindowThreadProcessId(hwnd, out pid);
Process proc = Process.GetProcessById((int)pid);
return Tuple.Create(proc.MainModule.FileName.ToString(),
proc.ProcessName);
}
既然两者都是string
,那么如何返回Tuple<string, string>
呢?
public static Tuple<string, string> GetProcessInfo(IntPtr hwnd)
{
uint pid = 0;
GetWindowThreadProcessId(hwnd, out pid);
Process proc = Process.GetProcessById((int)pid);
Tuple<string, string> t = new Tuple<string, string>
(
proc.MainModule.FileName,
proc.ProcessName
);
return t;
}
最后一个选项将使用out-params:
public voidstring GetProcessInfo(IntPtr hwnd, out string fileName, out string processName{
uint pid = 0;
GetWindowThreadProcessId(hwnd, out pid);
Process proc = Process.GetProcessById((int)pid);
fileName = proc.MainModule.FileName.ToString();
processName = proc.ProcessName;
}
您可以将返回类型更改为Process
:
public static Process GetProcessInfo(IntPtr hwnd)
{
uint pid = 0;
GetWindowThreadProcessId(hwnd, out pid);
return Process.GetProcessById((int)pid);
}
,然后从返回的对象中获取所需的数据:
var proc = GetProcessInfo(hwnd);
var processName = proc.ProcessName;
var moduleFileName = proc.MainModule.FileName.ToString();