返回值的类内部的c#方法

问题描述

| 目前我有一个这样的班级;
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
我如何更改我的班级以支持这一点?     

解决方法

您可以以相同的方式嵌套它...但是,您显然会失去任何数组功能。
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;
    }
}
    ,用
var1
var2
等创建
Coc
类,并用它代替
double[]
。 注意:您应该使用属性,而不是以这种方式公开字段。     ,如果您使用的是.Net 4,并且不介意将\ drug类声明为动态类,则可以从\“ 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;
    }
}
    ,为了能够通过变量引用值,您必须重构您的类,以便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,164);
    public ValueCollection mar = new ValueCollection(234,342);
}
    ,使其成为一个枚举:
public enum { var1=156,var2=4,var3=8 var4=164}
。我可能对语法有些了解,但这应该是一个开始。 http://msdn.microsoft.com/en-us/library/cc138362.aspx     ,能够做自己想做的事,需要事先知道您的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,164 };
DrugInfo mar = new DrugInfo() { 234,342 };
然后您可以访问它,例如::14ѭ或
drug.mar.var1
。     ,我可能对您的要求不满意,但您可以像这样使用Dictionary
public Dictionary<string,double> coc = new Dictionary<string,double>()
        {
        {\"var1\",156},{\"var2\",4},{\"var3\",8}
        };
然后像这样检索值
double d = drug.coc[\"var1\"]
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...