我有一个名为config的类,其中一个字符串字段名为key
。
当我应用类的GET属性时,属性必须返回一个不同类型的变量键(Int或bool或String)。
我按照以下方式实施了它:
public enum RetType {RetInt, RetBool, RetString};
...
public object PolimorphProperty(string key, RetType how)
{
get
{
switch (how)
{
case RetType.RetInt:
...;
case RetType.RetBool:
...;
case RetType.RetString:
...;
}
}
}
但是PolimorphProperty返回Object类型的问题。
请知道我在代码中更改了什么以获得适当的类型(int,bool,string), 不是对象?
答案 0 :(得分:1)
这样做:
public T PolimorphProperty<T>(string key)
{
return (T) objectInstanceHere;
}
用法示例:
int i = PolimorphProperty<int>("somekey");
这支持http://www.antiifcampaign.com/
在多态代码中,尽可能避免switch
,if
。
答案 1 :(得分:0)
public T PolimorphProperty<T>(string key, T how)
{
//todo
}
答案 2 :(得分:0)
C#中的任何type
实际上一个对象
从我对你的问题的理解,你这样称呼你的方法:
PolimorpthProperty(key, RetType.SomeType)
该方法返回一个对象。你应该这样使用它:
int key = (int)PolimorthProperty(key, RetType.RetInt);
这称为Unboxing。
答案 3 :(得分:0)
这个怎么样,考虑一下'Polymorph Property'的原始实现仍然在你的项目中,你添加了这个:
public TType PolimorphProperty<TType>(string key, RetType how)
{
return (TType)PolimorphProperty(key, how);
}
答案 4 :(得分:0)
如果我理解正确,你正在寻找这样的东西:
public T GenericMethod<T>(string key)
{
var ret = new object(); // Retrieve object from whatever...
return (T) ret;
}
public void UsageExample()
{
int typedResult = GenericMethod<int>("myKey");
}
如果你试图根据类型T获取不同的对象,使用不同的逻辑,那么你无论如何都必须打开类型,因为除非你的集合支持某种类型的对象(通常它们),编译器不会我不知道该怎么办。
在这种情况下,请检查此question。