Подтверждает Эндрю Мур за его ответ, я просто форматирую его, потому что он не компилировался в C # 3.5.
private string GetUserName(string procName)
{
string query = "SELECT * FROM Win32_Process WHERE Name = \'" + procName + "\'";
var procs = new System.Management.ManagementObjectSearcher(query);
foreach (System.Management.ManagementObject p in procs.Get())
{
var path = p["ExecutablePath"];
if (path != null)
{
string executablePath = path.ToString();
string[] ownerInfo = new string[2];
p.InvokeMethod("GetOwner", (object[])ownerInfo);
return ownerInfo[0];
}
}
return null;
}
function read_file(file, delete_after) {
delete_after = delete_after || "my default here";
//rest of code
}
Присваивает delete_after
значение delete_after
, если это не значение falsey , в противном случае присваивается строка "здесь мой по умолчанию"
. Для получения более подробной информации ознакомьтесь с обзором языка Дуга Крокфорда и ознакомьтесь с разделом, посвященным операторам .
Этот подход не работает, если вы хотите передать значение falsey , т.е. false
, null
, undefined
, 0
или ""
. Если вам требуется передать значения falsey , вам нужно будет использовать метод из ответа Тома Риттера .
При работе с несколькими параметрами функции, ( typeof null == "объект"
)
function foo(a, b) {
a = typeof a !== 'undefined' ? a : 42;
b = typeof b !== 'undefined' ? b : 'default_b';
...
}
В будущем, Вы сможете "распространить" один объект другому (в настоящее время по состоянию на 2019 НЕ поддерживаемый Краем !) - демонстрация, как использовать это для хороших опций по умолчанию независимо от порядка:
function test(options) {
var options = {
// defaults
url: 'defaultURL',
some: 'somethingDefault',
// override with input options
...options
};
var body = document.getElementsByTagName('body')[0];
body.innerHTML += '<br>' + options.url + ' : ' + options.some;
}
test();
test({});
test({url:'myURL'});
test({some:'somethingOfMine'});
test({url:'overrideURL', some:'andSomething'});
test({url:'overrideURL', some:'andSomething', extra:'noProblem'});
ссылка MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
... между тем, что ДЕЙСТВИТЕЛЬНО поддерживает Край, является Object.assign () (IE не делает, но я действительно надеюсь, что мы можем оставить IE :))
Так же, Вы могли сделать
function test(options) {
var options = Object.assign({
// defaults
url: 'defaultURL',
some: 'somethingDefault',
}, options); // override with input options
var body = document.getElementsByTagName('body')[0];
body.innerHTML += '<br>' + options.url + ' : ' + options.some;
}
test();
test({});
test({url:'myURL'});
test({some:'somethingOfMine'});
test({url:'overrideURL', some:'andSomething'});
test({url:'overrideURL', some:'andSomething', extra:'noProblem'});
I find something simple like this to be much more concise and readable personally.
function pick(arg, def) {
return (typeof arg == 'undefined' ? def : arg);
}
function myFunc(x) {
x = pick(x, 'my default');
}
function read_file(file, delete_after) {
delete_after = delete_after || "my default here";
//rest of code
}
Присваивает delete_after
значение delete_after
, если это не значение falsey , в противном случае присваивается строка "здесь мой по умолчанию"
. Для получения дополнительных сведений ознакомьтесь с обзором языка Дуга Крокфорда и ознакомьтесь с разделом, посвященным операторам .
Этот подход не работает, если вы хотите передать значение falsey , т.е. false
, null
, undefined
, 0
или ""
. Если вам требуется передать значения falsey , вам нужно будет использовать метод из ответа Тома Риттера .
При работе с несколькими параметрами функции, часто бывает полезно разрешить потребителю передать аргументы параметра в объекте, а затем объединить эти значения с объектом, который содержит значения по умолчанию для функции
function read_file(values) {
values = merge({
delete_after : "my default here"
}, values || {});
// rest of code
}
// simple implementation based on $.extend() from jQuery
function merge() {
var obj, name, copy,
target = arguments[0] || {},
i = 1,
length = arguments.length;
for (; i < length; i++) {
if ((obj = arguments[i]) != null) {
for (name in obj) {
copy = obj[name];
if (target === copy) {
continue;
}
else if (copy !== undefined) {
target[name] = copy;
}
}
}
}
return target;
};
, чтобы использовать
// will use the default delete_after value
read_file({ file: "my file" });
// will override default delete_after value
read_file({ file: "my file", delete_after: "my value" });