[英]equivalent to list() of php in C#
C# 中有一些方法等于 php 的 list() 吗?
PHP 中的使用列表() :
$array = array('foo','baa');
list($foo, $baa) = $array;
echo $foo; //foo
echo $baa; //baa
javascript 中的等效项:
var arr = ['foo','baa'];
var foo;
var baa;
[foo, baa] = arr;
提前致谢!
C# 中没有直接的语言等效项。 虽然集合初始值设定项可用于构造数组,但无法直接提取元素。
这需要显式设置变量,即:
var theArray = GetArrayFromSomewhere();
var foo = theArray[0];
var bar = theArray[1];
这更类似于初衷,尽管有些人可能不喜欢所有的仪式:
string a = null, b = null, c = null;
new ValList(v => a = v,
v => b = v,
v => c = v).SetFrom(new string[] { "foo", "bar" });
//here a is "foo", b will be "bar", and c is still null
还有简单的助手 class:
class ValList
{
private Action<string>[] _setters;
public ValList(params Action<string>[] refs)
{
_setters = refs;
}
internal void SetFrom(string[] values)
{
for (int i = 0; i < values.Length && i < _setters.Length; i++)
_setters[i](values[i]);
}
}
只是将@Yoni 的答案添加到扩展方法中。 这是一个可爱而愚蠢的练习; 但是,正如评论和答案中所指出的那样,某些语言功能根本无法从一种语言移植到另一种语言。
在 PHP 中, list($a, $b) = $c
构成一个赋值,并且由于不需要变量声明( list()
是声明),它可以提供简洁明了的赋值语法。
然而,在 C# 中,由于在使用之前需要声明变量,因此您最好在那时简单地从列表中分配值,如下面的示例所示。
说到,传入的例子:
public static void Into<TSource>(this IEnumerable<TSource> source,
params Action<TSource>[] actions)
{
if (ReferenceEquals(source, null)) {
throw new ArgumentNullException("source");
}
if (ReferenceEquals(actions, null)) {
throw new ArgumentNullException("actions");
}
foreach (var assignment in actions.Zip(source, (action, item) => new {
Action = action,
Item = item,
})) {
assignment.Action.Invoke(assignment.Item);
}
}
所以你可以简单地collection.Into(o => a = o, o =>...);
例如:
var numbers = new[] { 1, 2, 3, 4, 5 };
int a = 0, b = 0, c = 0, d = 0;
int e = 0, f = 0, g = 0, h = 0, i = 0, j = 0;
numbers.Into(o => a = o,
o => b = o,
o => c = o,
o => d = o);
numbers.Into(o => e = o,
o => f = o,
o => g = o,
o => h = o,
o => i = o,
o => j = o);
这将产生:
Console.WriteLine(a); // 1
Console.WriteLine(b); // 2
Console.WriteLine(c); // 3
Console.WriteLine(d); // 4
Console.WriteLine(e); // 1
Console.WriteLine(f); // 2
Console.WriteLine(g); // 3
Console.WriteLine(h); // 4
Console.WriteLine(i); // 5
Console.WriteLine(j); // 0
也许某些Expression<>
魔术可以将其缩短为:
numbers.Into(o => a,
o => b,
... )
在 C# 中执行原始 php(我对 PHP 一无所知)任务的一种方法是
List<string> name_list = new List<string>{"transmogrify","untransmogrify"};
name_list.ForEach(x => Debug.WriteLine(x));
这导致了更一般的观察,即 C# 允许您在将变量保留在数组或列表中的同时做很多事情。 特别是 LINQ 使许多事情变得非常简单。 因此,如果您正在寻找一种在 C# 中复制一些 PHP 代码的方法,我会以这些方式思考。 只是一个分开的例子,如果你有一个整数数组你想求和你可以这样做
int[] some_ints = {1, 2, 3, 4};
int sum += some_ints.Sum();
正如Reed所说,C# 中没有直接的语言等价物。
但是你可以像下面这样创建它↓
class Program
{
static void Main(string[] args)
{
string[] tmp = new string[] { "foo", "baa" };
string foo, baa;
tmp.Go(out foo, out baa);
Console.WriteLine(foo);
Console.WriteLine(baa);
Console.ReadKey();
}
}
public static class PHPList
{
public static void Go(this string[] soruce, out string p1, out string p2)
{
p1 = soruce[0] + "";
p2 = soruce[1] + "";
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.