我有一个名为config的类,其中包含两个名为key paramValue和parameterPath的字符串字段。
当我应用类的ChooseType方法时,该方法必须返回一个不同类型的变量paramValue(Int或bool或String)。
我按照以下方式实施了它:
class ConfigValue
{
public string paramPath;
private string paramValue;
public enum RetType {RetInt, RetBool, RetString};
public T PolimorphProperty<T>(RetType how)
{
{
switch (how)
{
case RetType.RetInt:
return (dynamic)int.Parse(paramValue);
case RetType.RetBool:
return (dynamic)Boolean.Parse(paramValue);
case RetType.RetString:
return (T)(object)paramValue;
default:
throw new ArgumentException("RetType not supported", "how");
}
}
}
}
我的问题是我如何在ConfigValue类中访问PolimorphProperty方法,以检索例如paramValue Int类型。
答案 0 :(得分:4)
T
和RetType
都是多余的。它应该是这样的:
class ConfigValue
{
public string paramPath;
private string paramValue;
public T PolimorphProperty<T>()
{
return (T)Convert.ChangeType(paramValue, typeof(T));
}
}
将其称为configValue.PolimorphProperty<int>()
。
或者如果您需要手动实现类型转换,您可以执行以下操作:
class ConfigValue
{
public string paramPath;
private string paramValue;
public T PolimorphProperty<T>()
{
if (typeof(T) == typeof(MySpecialType))
return (T)(object)new MySpecialType(paramValue);
else
return (T)Convert.ChangeType(paramValue, typeof(T));
}
}
答案 1 :(得分:1)
我认为以下代码最符合你想要的(我在写这里之前测试过它......)
public T PolimorphProperty<T>()
{
object tt = Convert.ChangeType(paramValue, typeof(T));
if (tt == null)
return default(T);
return (T) tt;
}
你可以这样调用代码:
int ret = cv.PolimorphProperty<int>();