动态返回属性值

时间:2016-02-08 21:20:22

标签: c# asp.net

我有一个类:

Class A
{
        public double? LondonTime { get; set; }
        public double? DelhiTime { get; set; }
}

现在,在我的另一个课程中,我想让这些属性变得动态。 Class B有一个函数foo(ClassA)

Class B

private void foo(Class A)
double d;
{
 If(some condition for London Time)
  {
    //How to pass LondonTime Property
    d = returnTime(); 
   }
 else if(some condition for Delhi Time)
 {
   //How to pass DelhiTimeProperty
    d = returnTime();
 }
}

private double returnTime(????) //What should I Pass here as an argument
{
  if(LondonTimeProperty Passed)
  {
    Some logic
  }
  if(DelhiTimeProperty Passed)
  {
    Some logic
  }  
  return 0;
}

在这里,这只是一个例子,如果它只给我一个动态值,我可以调整它。

那么,是否有一种方法可以根据某些条件在returnTime中传递参数并知道要返回什么内容?

3 个答案:

答案 0 :(得分:2)

一些一般性问题和评论:

为什么使用double代替DateTime

你的动态是什么意思?

看起来你需要的只是:

double? GetLondonTime(A a)
{
    //Some logic
}

double? GetDelhiTime(A a)
{
    //Some logic
}

void foo(A a)
{
    If(some condition for Delhi)
        return GetDelhiTime(a);
    If(some condition for London)
        return GetLondonTime(a);
    return 0;
}

如果您使用DateTime,则可以根据TimeZone确定是德里还是伦敦时间。

答案 1 :(得分:0)

使用此:

 public static dynamic GetPropertyValue(object obj, string propName)
        {
            return obj.GetType().GetProperty(propName).GetValue(obj, null);
        }

然后你可以使用:

GetPropertyValue(new ClassA(),"LondonTime");

答案 2 :(得分:0)

我不确定这是否是您正在寻找的东西,但我不会真正看到通过反射或动态对象使其复杂化的理由,除非还有更多的事情要做于:

    public class Times {
    public enum : int City {
        LONDON,
        NEW_DEHLI,
        OTHER_PLACE
    };
    public /*DateTime*/double GetTime(City) {
        switch(City) {
            case City.NEW_DEHLI:
            return getDehliTime();
        case City.London:
            return getLondonTime();
        default:
            return DateTime.Now;
        }
    } 
}