使用 lambda 自动更新变量
Automatically updating variables with lambda
我遇到了问题,我已请求社区帮助我解决问题。问题是在修改变量时自动更新所有变量。
我有使用 自动更新变量 b
的技巧。
在此之后,我阅读了 post 说明如何使用 get & set。但是,即使我在下面执行类似的操作,变量 b
也不会更新。
private static int b;
public int B
{
get { return b; }
set { b = a + 5; }
}
我也找不到使用 lambda 的方法并将它们组合在一起。下面是我用来测试的代码。
class Class3
{
public class Storage
{
public static int a = 100;
//public static int b => a + 5;
public static int b => a + 5;
public static int c;
}
public static void Main()
{
Methods Test = new Methods();
Console.WriteLine("Original a value: {0}", Storage.a);
Console.WriteLine("b value: {0}", Storage.b);
Console.WriteLine("c value: {0}", Storage.c);
Test.Met1();
Console.WriteLine("After met1: {0}", Storage.a);
Console.WriteLine("b value: {0}", Storage.b);
Console.WriteLine("c value: {0}", Storage.c);
Test.Met2();
Console.WriteLine("After met2: {0}", Storage.a);
Console.WriteLine("b value: {0}", Storage.b);
Console.WriteLine("c value: {0}", Storage.c);
Test.Met3();
Console.WriteLine("After met3: {0}", Storage.a);
Console.WriteLine("b value: {0}", Storage.b);
Console.WriteLine("c value: {0}", Storage.c);
Storage.b += 1;
Console.WriteLine("b value: {0}", Storage.b);
}
public class Methods
{
public void Met1()
{
Storage.a -= 10;
Storage.c = Storage.a;
}
public void Met2()
{
Storage.a -= 10;
Storage.c = Storage.a;
}
public void Met3()
{
Console.WriteLine("{0}", Storage.a);
Storage.c = Storage.a;
Met1();
Met2();
if (Storage.a > 10)
{
Met3();
}
}
}
}
我希望看到的是 b
每次 a
更改值时更新。此外,代码应允许 Storage.b += 1;
更新 b.
的值
有没有办法解决这个问题?我真的需要帮助。如果有 link 我可以阅读,请与我分享。谢谢!
class 应该是这样的:
public class Storage
{
public int a { get; set; }
public int b => a + 5;
public int c { get; set; }
public void Met1()
{
this.a -= 10;
this.c = this.a;
}
public void Met2()
{
this.a -= 10;
this.c = this.a;
}
public void Met3()
{
Console.WriteLine("{0}", this.a);
this.c = this.a;
Met1();
Met2();
if (this.a > 10)
{
Met3();
}
}
}
这是您的使用方法:
static void Main(string[] args)
{
Storage storage = new Storage();
storage.a = 100;
Console.WriteLine("Original a value: {0}", storage.a);
Console.WriteLine("b value: {0}", storage.b);
Console.WriteLine("c value: {0}", storage.c);
storage.Met1();
Console.WriteLine("After met1: {0}", storage.a);
Console.WriteLine("b value: {0}", storage.b);
Console.WriteLine("c value: {0}", storage.c);
storage.Met2();
Console.WriteLine("After met2: {0}", storage.a);
Console.WriteLine("b value: {0}", storage.b);
Console.WriteLine("c value: {0}", storage.c);
storage.Met3();
Console.WriteLine("After met3: {0}", storage.a);
Console.WriteLine("b value: {0}", storage.b);
Console.WriteLine("c value: {0}", storage.c);
Console.ReadKey();
//storage.b += 1;
//Console.WriteLine("b value: {0}", storage.b);
}
请注意,如果 b 等于 a + 5,则不能为 b 赋值。
也许这样的事情对你有用。您只需要使用属性并隐藏成员变量。
当然,如前所述,我也建议您不要使用静态变量和getter。
public static class Storage
{
private static int a = 100;
public static int A {
get { return a; }
set { a = value; b = a + 5; }
}
private static int b = a + 5;
public static int B {
get { return b; }
set { b = value; }
}
public static int c;
}
编辑 - 这既适用于直接更新 B 的值,也适用于在 A 的值更改时更新它。
我修改了Storage
和Methods
类
public class Storage
{
private int _a;
public int A
{
get { return _a; }
set
{
_a = value;
B = value + 5;
}
}
public int B { get; set; }
public int C { get; set; }
public Storage()
{
A = 100;
}
}
public class Methods
{
private Storage _storage;
public Methods(Storage storage)
{
_storage = storage;
}
public void Met1()
{
_storage.A -= 10;
_storage.C = _storage.A;
}
public void Met2()
{
_storage.A -= 10;
_storage.C = _storage.A;
}
public void Met3()
{
Console.WriteLine("{0}", _storage.A);
_storage.C = _storage.A;
Met1();
Met2();
if (_storage.A > 10)
{
Met3();
}
}
}
里面Main
var storage = new Storage();
Methods Test = new Methods(storage);
Console.WriteLine("Original a value: {0}", storage.A);
Console.WriteLine("b value: {0}", storage.B);
Console.WriteLine("c value: {0}", storage.C);
Test.Met1();
Console.WriteLine("After met1: {0}", storage.A);
Console.WriteLine("b value: {0}", storage.B);
Console.WriteLine("c value: {0}", storage.C);
Test.Met2();
Console.WriteLine("After met2: {0}", storage.A);
Console.WriteLine("b value: {0}", storage.B);
Console.WriteLine("c value: {0}", storage.C);
Test.Met3();
Console.WriteLine("After met3: {0}", storage.A);
Console.WriteLine("b value: {0}", storage.B);
Console.WriteLine("c value: {0}", storage.C);
storage.B += 1;
Console.WriteLine("b value: {0}", storage.B);
我遇到了问题,我已请求社区帮助我解决问题。问题是在修改变量时自动更新所有变量。
我有使用 b
的技巧。
在此之后,我阅读了 post 说明如何使用 get & set。但是,即使我在下面执行类似的操作,变量 b
也不会更新。
private static int b;
public int B
{
get { return b; }
set { b = a + 5; }
}
我也找不到使用 lambda 的方法并将它们组合在一起。下面是我用来测试的代码。
class Class3
{
public class Storage
{
public static int a = 100;
//public static int b => a + 5;
public static int b => a + 5;
public static int c;
}
public static void Main()
{
Methods Test = new Methods();
Console.WriteLine("Original a value: {0}", Storage.a);
Console.WriteLine("b value: {0}", Storage.b);
Console.WriteLine("c value: {0}", Storage.c);
Test.Met1();
Console.WriteLine("After met1: {0}", Storage.a);
Console.WriteLine("b value: {0}", Storage.b);
Console.WriteLine("c value: {0}", Storage.c);
Test.Met2();
Console.WriteLine("After met2: {0}", Storage.a);
Console.WriteLine("b value: {0}", Storage.b);
Console.WriteLine("c value: {0}", Storage.c);
Test.Met3();
Console.WriteLine("After met3: {0}", Storage.a);
Console.WriteLine("b value: {0}", Storage.b);
Console.WriteLine("c value: {0}", Storage.c);
Storage.b += 1;
Console.WriteLine("b value: {0}", Storage.b);
}
public class Methods
{
public void Met1()
{
Storage.a -= 10;
Storage.c = Storage.a;
}
public void Met2()
{
Storage.a -= 10;
Storage.c = Storage.a;
}
public void Met3()
{
Console.WriteLine("{0}", Storage.a);
Storage.c = Storage.a;
Met1();
Met2();
if (Storage.a > 10)
{
Met3();
}
}
}
}
我希望看到的是 b
每次 a
更改值时更新。此外,代码应允许 Storage.b += 1;
更新 b.
有没有办法解决这个问题?我真的需要帮助。如果有 link 我可以阅读,请与我分享。谢谢!
class 应该是这样的:
public class Storage
{
public int a { get; set; }
public int b => a + 5;
public int c { get; set; }
public void Met1()
{
this.a -= 10;
this.c = this.a;
}
public void Met2()
{
this.a -= 10;
this.c = this.a;
}
public void Met3()
{
Console.WriteLine("{0}", this.a);
this.c = this.a;
Met1();
Met2();
if (this.a > 10)
{
Met3();
}
}
}
这是您的使用方法:
static void Main(string[] args)
{
Storage storage = new Storage();
storage.a = 100;
Console.WriteLine("Original a value: {0}", storage.a);
Console.WriteLine("b value: {0}", storage.b);
Console.WriteLine("c value: {0}", storage.c);
storage.Met1();
Console.WriteLine("After met1: {0}", storage.a);
Console.WriteLine("b value: {0}", storage.b);
Console.WriteLine("c value: {0}", storage.c);
storage.Met2();
Console.WriteLine("After met2: {0}", storage.a);
Console.WriteLine("b value: {0}", storage.b);
Console.WriteLine("c value: {0}", storage.c);
storage.Met3();
Console.WriteLine("After met3: {0}", storage.a);
Console.WriteLine("b value: {0}", storage.b);
Console.WriteLine("c value: {0}", storage.c);
Console.ReadKey();
//storage.b += 1;
//Console.WriteLine("b value: {0}", storage.b);
}
请注意,如果 b 等于 a + 5,则不能为 b 赋值。
也许这样的事情对你有用。您只需要使用属性并隐藏成员变量。
当然,如前所述,我也建议您不要使用静态变量和getter。
public static class Storage
{
private static int a = 100;
public static int A {
get { return a; }
set { a = value; b = a + 5; }
}
private static int b = a + 5;
public static int B {
get { return b; }
set { b = value; }
}
public static int c;
}
编辑 - 这既适用于直接更新 B 的值,也适用于在 A 的值更改时更新它。
我修改了Storage
和Methods
类
public class Storage
{
private int _a;
public int A
{
get { return _a; }
set
{
_a = value;
B = value + 5;
}
}
public int B { get; set; }
public int C { get; set; }
public Storage()
{
A = 100;
}
}
public class Methods
{
private Storage _storage;
public Methods(Storage storage)
{
_storage = storage;
}
public void Met1()
{
_storage.A -= 10;
_storage.C = _storage.A;
}
public void Met2()
{
_storage.A -= 10;
_storage.C = _storage.A;
}
public void Met3()
{
Console.WriteLine("{0}", _storage.A);
_storage.C = _storage.A;
Met1();
Met2();
if (_storage.A > 10)
{
Met3();
}
}
}
里面Main
var storage = new Storage();
Methods Test = new Methods(storage);
Console.WriteLine("Original a value: {0}", storage.A);
Console.WriteLine("b value: {0}", storage.B);
Console.WriteLine("c value: {0}", storage.C);
Test.Met1();
Console.WriteLine("After met1: {0}", storage.A);
Console.WriteLine("b value: {0}", storage.B);
Console.WriteLine("c value: {0}", storage.C);
Test.Met2();
Console.WriteLine("After met2: {0}", storage.A);
Console.WriteLine("b value: {0}", storage.B);
Console.WriteLine("c value: {0}", storage.C);
Test.Met3();
Console.WriteLine("After met3: {0}", storage.A);
Console.WriteLine("b value: {0}", storage.B);
Console.WriteLine("c value: {0}", storage.C);
storage.B += 1;
Console.WriteLine("b value: {0}", storage.B);