Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在一条语句中是否有增加多个具有相同值的变量的方法_C# - Fatal编程技术网

C# 在一条语句中是否有增加多个具有相同值的变量的方法

C# 在一条语句中是否有增加多个具有相同值的变量的方法,c#,C#,我想用相同的值增加多个变量,如下所示: A+=2; B+=2; C+=2; 但在一份声明中 我已经试过了: A += B += C =+ 2; 但这是错误的。此堆栈多次显示“2”。有什么方法可以做到这一点吗?没有,C语言中没有这样的语法可以做到这一点 当然,您可以将所有增量操作放在一行上: A+=2;B+=2;C+=2; 但那不是你真正想要的 我要指出的是,如果您发现这是代码中的一种常见模式——非常常见,以至于您觉得该语言中应该有一种特殊的语法来支持它——那么您可能忽略了定义新类型的机会,

我想用相同的值增加多个变量,如下所示:

A+=2;
B+=2;
C+=2;
但在一份声明中

我已经试过了:

A += B += C =+ 2;

但这是错误的。此堆栈多次显示“2”。有什么方法可以做到这一点吗?

没有,C语言中没有这样的语法可以做到这一点

当然,您可以将所有增量操作放在一行上:

A+=2;B+=2;C+=2;
但那不是你真正想要的

我要指出的是,如果您发现这是代码中的一种常见模式——非常常见,以至于您觉得该语言中应该有一种特殊的语法来支持它——那么您可能忽略了定义新类型的机会,可能是一个
结构
,为了表示三元组值,您发现自己在定期的基础上进行了统一的调整

例如,您可能有如下内容:

struct MyStruct
{
公共int A{get;}
公共int B{get;}
公共int C{get;}
公共MyStruct(inta、intb、intc)
{
A=A;
B=B;
C=C;
}
公共静态MyStruct操作符+(MyStruct v,int i)
{
返回新的MyStruct(v.A+i、v.B+i、v.C+i);
}
}
您可以这样使用:

MyStruct v=新的MyStruct(1,2,3);
v+=2;
//v.A现在是3,v.B现在是4,v.C现在是5

这完全是无稽之谈,几乎没有实际价值,但您可以使用指针和不安全的

static unsafe void Mutate(int*[] ary, Func<int,int> func)
{
   foreach (var item in ary)
      *item = func(*item);
}
static unsafe void Main(string[] args)
{
   var a = 0;
   var b = 0;
   var c = 0;

   var ary = new [] { &a, &b,&c};
   Mutate(ary, x => x + 2);

   Console.WriteLine(a);
}

静态不安全void Mutate(Func-Func,params int*[]数组)
{
foreach(数组中的变量项)
*项目=功能(*项目);
}
...
变异(x=>x+2,&a,&b,&c);
控制台写入线(a);

公共静态类扩展
{
公共静态不安全void Mutate(此int*[]数组,Func Func)
{
foreach(数组中的变量项)
*项目=功能(*项目);
}
}
...
var list=new[]{&a,&b,&c};
突变(x=>x+2);
控制台写入线(a);

“这完全是胡说八道”——是你说的,不是我说的这就是说:对于少量变量,一个带有
ref
参数的不安全的
Mutate()
方法也同样有效。对于大量的变量,那么……这些变量无论如何都应该在数组中,因此不安全的
Mutate()
方法将数组作为参数而不是单个变量引用也同样有效。以上是一个有趣的练习,但我不确定它是否实用(还有,你所有的lambda都有
x+=2
,当
x+2
至少也能工作的时候)@PeterDuniho是的,所有的优点都是,这肯定会让我的代码审查失败。你说这是“完全没有意义的”,而我正处于想这样做的境地,那么我的以下理由是合理的吗?我将销售值存储在对象列表中,例如
salesDay
salesWeek
salemonth
,然后使用它们显示HTML表格。我认为这样做是因为当向这些变量添加相同的值时,阅读代码会更容易,而不是在其逻辑中添加较小的值。我想以最好的方式编写代码,但我现在想知道这是否是一种糟糕的代码实践。@Sondre在编写之前,我可能会先看看peters的例子。不安全也有它的用途,尽管这有点过分了
2
static unsafe void Mutate(Func<int, int> func, params int*[] array )
{
   foreach (var item in array)
      *item = func(*item);
}

...

Mutate(x => x + 2, &a, &b, &c);
Console.WriteLine(a);
public static class Extensions
{
   public static unsafe void Mutate( this int*[] array, Func<int, int> func)
   {
      foreach (var item in array)
         *item = func(*item);
   }
}

...

var list = new  [] { &a, &b,&c};
list.Mutate(x => x + 2);
Console.WriteLine(a);