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 返回 Object 类型的问题。

我应该在代码中更改什么以获得适当的类型(int、bool、string),而不是对象?

4

5 回答 5

1

做这个:

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

使用示例:

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

这支持http://www.antiifcampaign.com/

就此而言,尽可能避免在多态代码中switch使用。if

于 2012-07-15T12:37:23.020 回答
0
public T PolimorphProperty<T>(string key, T how)
{
    //todo
}
于 2012-07-15T12:22:34.280 回答
0

typeC# 中的Any实际上是一个对象。
根据我从您的问题中了解到的情况,您以这种方式调用您的方法:
PolimorpthProperty(key, RetType.SomeType)
该方法返回一个对象。您应该这样使用它:
int key = (int)PolimorthProperty(key, RetType.RetInt);
这称为Unboxing

于 2012-07-15T12:25:42.203 回答
0

这个怎么样,考虑到你的“PolimorphProperty”的原始实现仍然是你的项目,你添加这个:

public TType PolimorphProperty<TType>(string key, RetType how) 
 {
     return (TType)PolimorphProperty(key, how);
 }
于 2012-07-15T12:37:11.343 回答
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 获取不同的对象,那么无论如何您都必须打开类型,因为除非您的集合支持某种类型的对象(它们通常支持),否则编译器不知道该怎么办。
在这种情况下,请检查此问题

于 2012-07-15T12:39:16.757 回答