泛型类中方法的不同返回类型

时间:2009-06-11 18:56:02

标签: c# .net generics

以下代码刚刚组成,这可能与C#有关吗?

class A
{
    public int DoStuff()
    {
        return 0;
    }
}

class B
{
    public string DoStuff()
    {
        return "";
    }
}

class MyMagicGenericContainer<T> where T : A, B
{
    //Below is the magic <------------------------------------------------
    automaticlyDetectedReturnTypeOfEitherAOrB GetStuff(T theObject)
    {
        return theObject.DoStuff();
    }
}

2 个答案:

答案 0 :(得分:6)

你的愿望就是我的命令。

public interface IDoesStuff<T>
{
  T DoStuff();
}

public class A : IDoesStuff<int>
{
  public int DoStuff()
  {  return 0; }
}

public class B : IDoesStuff<string>
{
  public string DoStuff()
  { return ""; }
}
public class MyMagicContainer<T, U> where T : IDoesStuff<U>
{
  U GetStuff(T theObject)
  {
    return theObject.DoStuff();
  }
}

如果你想减少耦合,你可以选择:

public class MyMagicContainer<U>
{
  U GetStuff(Func<U> theFunc)
  {
    return theFunc()
  }
}

答案 1 :(得分:2)

最终调用automaticlyDetectedReturnTypeOfEitherAOrB()的方法必须知道返回类型。除非你使方法返回对象。然后调用方法可以返回任何内容(int或string)并找出如何处理它。

另一个选择是做这样的事情: (抱歉,我没有打开VisStudio来验证语法或它是否正常工作)

R GetStuff<R>(T theObject)
{
    return (R)theObject.DoStuff();
}

void Method1()
{
    int i = GetStuff<int>(new A());
    string s = GetStuff<string>(new B());
}