C# 如何从一个方法返回多个变量?
此方法仅返回进程文件名:C# 如何从一个方法返回多个变量?,c#,.net,winforms,C#,.net,Winforms,此方法仅返回进程文件名: 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.Pr
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;
您可以创建并返回描述结果的对象:
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
}
}
或者(我个人不太喜欢这个),一个元组
:
公共元组GetProcessInfo(IntPtr hwnd)
{
uint-pid=0;
GetWindowThreadProcessId(hwnd,输出pid);
Process proc=Process.GetProcessById((int)pid);
返回Tuple.Create(proc.MainModule.FileName.ToString(),
进程名称);
}
既然两者都是字符串
,不如返回一个元组
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;
}
公共静态元组GetProcessInfo(IntPtr hwnd)
{
uint-pid=0;
GetWindowThreadProcessId(hwnd,输出pid);
Process proc=Process.GetProcessById((int)pid);
Tuple t=新的Tuple
(
proc.MainModule.FileName,
进程名
);
返回t;
}
最后一个选项将使用out参数:
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;
}
我相信你有四个选择(按优先顺序)
- 直接返回
,并从调用者提取必要的信息proc.MainModule
您可以将返回类型更改为
过程:
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();
out
params。。2002年就是这样;P@Yuval伊扎科夫:是的。这是一个丑陋的选择,但语言允许这样做。我永远不会这么做,只是提到它来涵盖所有选项。元组方法在早期开发中非常好,但我同意它应该在工作时重构为显式类。@DavidArno我讨厌(目前)在C#中使用元组。我希望他们在C#7.0中得到更好的支持。目前它们完全不可读,使代码看起来像垃圾。
public class ProcessInformation
{
public string FileName;
public string ProcessName;
}
public static ProcessInformation GetProcessInfo(IntPtr hwnd)
{
uint pid = 0;
GetWindowThreadProcessId(hwnd, out pid);
Process proc = Process.GetProcessById((int)pid);
var pi = new ProcessInformation
{
proc.MainModule.FileName,
proc.MainModule.ProcessName
}
return pi;
}
public static Tuple<string, string> GetProcessInfo(IntPtr hwnd)
{
uint pid = 0;
GetWindowThreadProcessId(hwnd, out pid);
Process proc = Process.GetProcessById((int)pid);
return return Tuple.Create(proc.MainModule.FileName,proc.MainModule.ProcessName);
}
string GetProcessInfo(IntPtr hwnd, out fileName, out processName)
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();