我有一个类:
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
中传递参数并知道要返回什么内容?
答案 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;
}
}
}