目前我有这样的课程;
public static class drug
{
public const double[] coc = new double[] { 156, 4, 8, 164 };
public const double[] mar = new double[] { 234, 64, 34, 342 };
}
我引用它的方式是这样的:
double one = drug.coc[0];
但是我想像这样引用它
double one = drug.coc.var1
我怎样才能改变我的班级来支持这个?
答案 0 :(得分:2)
使用Coc
,var1
等创建var2
课程,并使用该课程代替double[]
。
注意:您应该使用属性而不是以这种方式公开字段。
答案 1 :(得分:1)
您可以以相同的方式嵌套它...但是,您显然会失去任何阵列功能。
public static class drug
{
public static class coc
{
public const double var1 = 156;
public const double var2 = 4;
public const double var3 = 8;
public const double var4 = 164;
}
public static class mar
{
public const double var1 = 234;
public const double var2 = 64;
public const double var3 = 34;
public const double var4 = 342;
}
}
答案 2 :(得分:1)
如果您使用.Net 4,并且不介意将“药物”类声明为动态,则可以继承“DynamicObject”并重载TryGetMember方法以将传入的方法名称解析为有效的索引到您的阵列。
快速又脏,而且不完全是你想要的,我没时间调整它,但它确实有效。
void Main()
{
dynamic d = new drug();
double v1 = d.mar0; //234
double v2 = d.mar1; //64
double v3 = d.mar2; //34
double v4 = d.mar3; //342
}
public class drug : DynamicObject
{
private double[] coc = new double[] { 156, 4, 8, 164 };
private double[] mar = new double[] { 234, 64, 34, 342 };
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
string name = binder.Name.ToLower();
if(name.StartsWith("coc"))
{
result = coc[int.Parse(name.Replace("coc",""))];
return true;
}
if(name.StartsWith("mar"))
{
result = mar[int.Parse(name.Replace("mar",""))];
return true;
}
result = -1;
return false;
}
}
答案 3 :(得分:0)
为了能够通过变量引用您的值,您必须重构您的类,以便 cac 变量是另一个类
public class ValueCollection
{
public ValueCollection(double var1, double var2, double var3, double var4)
{
Var1 = var1;
Var2 = var2;
Var3 = var3;
Var4 = var4;
}
public double Var1 { get; private set; }
public double Var2 { get; private set; }
public double Var3 { get; private set; }
public double Var3 { get; private set; }
}
然后你会更新原来的课程:
public static class drug
{
public ValueCollection coc = new ValueCollection(156,4,8,164);
public ValueCollection mar = new ValueCollection(234,64,34,342);
}
答案 4 :(得分:0)
将其设为枚举:public enum { var1=156, var2=4, var3=8 var4=164}
。我可能会对语法有所了解,但它应该是一个开始。
答案 5 :(得分:0)
能够做你想做的事情,你需要事先知道你的coc集合中有多少双打(数组,IEnumerable,等等)。假设你知道这一点,你仍然需要一个属性,这样coc就会成为一个类本身:
public class DrugInfo
{
public double var1 {get;set;}
public double var2 {get;set;}
public double var3 {get;set;}
public double var4 {get;set;}
}
然后,您的新代码将如下所示:
DrugInfo coc = new DrugInfo() { 156, 4, 8, 164 };
DrugInfo mar = new DrugInfo() { 234, 64, 34, 342 };
然后您可以访问:drug.coc.var1
或drug.mar.var1
。
答案 6 :(得分:0)
我可能会关注你的问题,但你可以使用像这样的词典
public Dictionary<string, double> coc = new Dictionary<string, double>()
{
{"var1", 156}, {"var2", 4}, {"var3", 8}
};
并检索像这样的值
double d = drug.coc["var1"]