C#里定义int类型变量a1、a2、a3、a4、a5,如何采用索引的形式挨个赋值

2025-01-05 14:21:56
推荐回答(3个)
回答1:

软糖来回答把。方法有很多种。

  1. 抛开a1,a2那套变量,使用Dictionary来存储变量名和数值。

Dictionary 字典 = new Dictionary();
字典.Add("a1", 1); //添加变量a1, 值为1
字典.Add("a2", 2);
字典.Add("a178", 4);
字典.Add("a179", 5);
字典["a" + 1.ToString()] = 100; //给变量a1值设为100,嗯,就当它是变量把。 
字典["a" + 2.ToString()] = 200;
var index = 178;
字典["a" + index.ToString()] = 400;
字典["a179"] = 500;

2.如果变量是引用类型,可以把这些变量装进容器,然后用容器索引指向这些变量。

但是int是值类型,这就不好办了。

要么把int改为引用化的类型Qint(软糖自己写的新int类)

要么使用string之类的。

        /// 
    /// 封装指定类型的结构到属性da,使其作为数值。
    /// 方便复杂计算、参数传递和脚本编译。 
    /// 

    /// 必须为没有null值的结构
    public class 数值 where T : struct {
        public T da { get { return get(); } set { set(value); } }
        public 数值() { }
        public 数值(T value) { da = value; }
        public virtual T get() { return da; }
        public virtual void set(T value) { da = value; }

        public static implicit operator T(数值 数值) { return 数值.da; }
        public static explicit operator 数值(T value) { return new 数值(value); }
    } 
    public class Qint : 数值 {
        public Qint() : base() { }
        public Qint(int value) : base(value) { }
        public static implicit operator int(Qint 数值) { return 数值.da; }
        public static explicit operator Qint(int value) { return new Qint(value); }
    }
string a1 = "0", a2 = "0", a3 = "0", a4 = "0", a5 = "0";
List 我是一个容器 = new List() { "", a1, a2, a3, a4, a5 };
我是一个容器[1] = "3";
我是一个容器[2] = "4";
我是一个容器[3] = "5";
我是一个容器[4] = "6";
我是一个容器[5] = "7";

3.使用反射。System.Reflection。但是这个效率很低。

    using System.Reflection;
    public class 反射类
    {
        public int a1 = 1;
        public int a2 = 2;
        public int a3 = 3;
        void 获取变量(int 序号) {
            反射类 反射类实例 = new 反射类();
            Type t = typeof(反射类); //获取a1所在的类class
            FieldInfo 变量信息 = t.GetField("a" + 序号.ToString());  //获取a1这个变量信息
            var 获得的值 = (int)变量信息.GetValue(反射类实例);  //获取a1所在的实例的值
            变量信息.SetValue(反射类实例, 3);  //复制a1所在的实例的值 = 3
        }
    }

回答2:

double total=0;
for (int i=0; s.Length-1;i++)
{
int n=0;
int.TryParse(s[i],out n);
total+=n;
}

回答3:

可以通过循环呀