这段代码:
function foo()
return 1, 2, 3
end
bar = {}
bar = {a, b, c = foo()}
Run Code Online (Sandbox Code Playgroud)
生产:
bar.a = nil
bar.b = nil
bar.c = 1
Run Code Online (Sandbox Code Playgroud)
怎么写这样才能得到:
bar.a = 1
bar.b = 2
bar.c = 3
Run Code Online (Sandbox Code Playgroud)
无需写这样的东西:
function foo()
return 1, 2, 3
end
bar = {}
a, b, c = foo()
bar = {a = a, b = b, c = c}
Run Code Online (Sandbox Code Playgroud) 在下面的代码中,除了“疯狂尝试”之外,还有更好的选择吗?我正在收集各种类似的系统信息,并且还有更多这些烦人的try catch结构,并且非常希望摆脱它们。
请注意,这实际上是有道理的。并非可以检索try块中的所有过程信息,而且不可用的内容还是可选的,而同时跳过不可用的内容也是不可接受的,因此为什么不只有一对try catch对。
如果只有那些try catch语句可以进入该Append()方法。
foreach (Process proc in Process.GetProcesses())
{
try { Append(proc.Threads.Count); } catch { }
try { Append(proc.Id); } catch { }
try { Append(proc.ProcessName); } catch { }
try { Append(proc.BasePriority); } catch { }
try { Append(proc.StartTime); } catch { }
Append(proc.HandleCount,
proc.PrivateMemorySize64,
proc.NonpagedSystemMemorySize64,
proc.PagedMemorySize64,
proc.PeakPagedMemorySize64,
proc.PeakVirtualMemorySize64);
}
Run Code Online (Sandbox Code Playgroud) 我需要生成在它们生成的所有机器上具有极高可能性的字符串,并且每次运行代码时都会有所不同.唯一的概率不一定是100%,这与安全无关,只有唯一性很重要(用例是播种大型非加密PRNG).
我目前的想法是SHA512散列网络适配器信息,包括适配器统计信息,计算机名称,进程ID,计算机运行时间(以滴答为单位)和UTC当前时间(以刻度表示),并将其转换为64个字符的基本64位Unicode字符串.
看起来声音,但有没有更好的,例如.net功能,如何做到这一点?
工作代码:
using System;
using System.Diagnostics;
using System.Net.NetworkInformation;
using System.Security.Cryptography;
using System.Text;
static class UniqueString
{
private static SHA512 sha = SHA512.Create();
public static string Gen()
{
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
StringBuilder uniqueString = new StringBuilder();
foreach (NetworkInterface adapter in adapters)
{
IPInterfaceStatistics stats = adapter.GetIPStatistics();
uniqueString.AppendFormat("{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} ",
adapter.Description,
adapter.Id,
adapter.Name,
adapter.Speed,
adapter.GetPhysicalAddress(),
adapter.NetworkInterfaceType,
stats.BytesReceived,
stats.BytesSent,
stats.IncomingPacketsDiscarded,
stats.IncomingPacketsWithErrors,
stats.IncomingUnknownProtocolPackets,
stats.NonUnicastPacketsReceived,
stats.NonUnicastPacketsSent, …Run Code Online (Sandbox Code Playgroud)