2016-02-08 232 views
0

我有一个类,如:动态返回属性值

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; 
} 

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

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

回答

0

使用此:

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

,然后你可以使用:

GetPropertyValue(new ClassA(),"LondonTime"); 
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是新德里和伦敦的时间。

+0

我喜欢你在最后关于时区的评论,像这样的东西也可以工作:'var culture = System.Globalization.CultureInfo.CurrentCulture;' +1 – Matt

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; 
     } 
    } 
}