2012-07-15 30 views
2

我有一个名为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回报问题对象类型。

请你知道我在代码中改变了什么以获得合适的类型(int,bool,string), 不是对象吗?

+1

[Making a generic property]的可能的重复(http://stackoverflow.com/questions/271347/making-a-generic-property) – 2012-07-15 12:36:31

回答

1

这样做:

public T PolimorphProperty<T>(string key) 
{ 
    return (T) objectInstanceHere; 
} 

用例:

int i = PolimorphProperty<int>("somekey"); 

而且这个支持http://www.antiifcampaign.com/

尽可能地避免switchif在这个问题上,在一个多态代码。

0
public T PolimorphProperty<T>(string key, T how) 
{ 
    //todo 
} 
+2

那么,'T how'有什么意义呢? – sloth 2012-07-15 12:27:12

+1

我表明你可以使用通用的方法参数 – 2012-07-15 12:29:25

+0

在这种情况下,第二parametre可以在不影响 – 2012-07-15 12:30:59

0

不限type在C#是实际上的对象。
从我所了解的问题中,您可以这样称呼您的方法:
PolimorpthProperty(key, RetType.SomeType)
该方法返回一个对象。您应该这样使用它:
int key = (int)PolimorthProperty(key, RetType.RetInt);
这叫做Unboxing

+0

哎呀,不知道你在寻找一个通用的解决方案... – 2012-07-15 12:26:29

0

这样吧,考虑到你原来实行的 'PolimorphProperty' 保持即时你的项目,你补充一点:

public TType PolimorphProperty<TType>(string key, RetType how) 
{ 
    return (TType)PolimorphProperty(key, how); 
} 
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