【问题标题】:Generic method with return type as object [duplicate]返回类型为对象的通用方法[重复]
【发布时间】:2012-06-10 17:50:09
【问题描述】:
ClassA
{
        int a;
        public int aValue
        {
            get { return a; }
        }
}

ClassB : ClassA
{
      int b;
        public int bValue
        {
            get { return b; }
        }
}

ClassC : ClassA
{
      int c;
        public int cValue
        {
            get { return c; }
        }
}

public void getObject(int i) 
{
    if(i==1)
    {
        ClassB objB = new ClassB();
         objB.aValue = 20;
         objB.bValue = 30;
         Console.Writeline(objB.aValue);
         Console.Writeline(objB.bValue);
    }
    else
    {
        ClassC objC = new ClassC();
        objC.aValue = 20;
        objC.cValue = 40;
        Console.Writeline(objC.aValue);
        Console.Writeline(objC.cValue);
    }
}

相反,我想创建一个返回对象的通用方法:

public T getObject<T>(int i) where T : class
{
    if(i==1)
    {
        ClassB objB = new ClassB();
         return objB as T;
    }
    else
    {
        ClassC objC = new ClassC();
        return objC as T;
    }
}

public static void main()
{
    Object obj = getObject<Object>(5);
    obj.aValue = 20;
    obj.bValue = 30;
    obj.cValue = 40;
    Console.Writeline(obj.aValue);
    Console.Writeline(obj.bValue);
    Console.Writeline(obj.cValue);
}

在这种情况下 obj = objC 所以 bValue = 30 和 cValue = 40 应该发生。但我不能这样做。 这是我的第三次尝试。我希望我至少这次是清楚的。

【问题讨论】:

  • 您似乎应该寻求解决问题的最佳方法,而不是如何将方钉塞入圆孔中。 1) 没有人明白为什么泛型应该在这里发挥作用。 2)你的两个类是否应该有某种通用接口或基类? 3) 如果您尝试设置一个或另一组变量,则必须将其添加到确定返回哪个类的相同逻辑中,那么为什么首先要有这些类?
  • 这不是泛型的用途,我建议你重新阅读一些关于泛型的教程。
  • 这是我的第三次尝试。我希望至少这次我清楚了。

标签: c# generics object return


【解决方案1】:

看来问题可能出在您提出问题的方式上...

您可以在通用约束中使用 where 子句来约束它..

我不确定您为什么要为通用方法强制装箱对象...

【讨论】:

  • +1,这个问题的前一个版本也给出了这个建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 2018-10-19
  • 2014-07-31
  • 2020-11-22
  • 2023-03-18
相关资源
最近更新 更多