C# 返回类型为对象的泛型方法
相反,我想创建一个泛型方法,该方法返回一个对象,如下所示:C# 返回类型为对象的泛型方法,c#,generics,object,return,C#,Generics,Object,Return,相反,我想创建一个泛型方法,该方法返回一个对象,如下所示: ClassA { int a; public int aValue { get { return a; } } } ClassB : ClassA { int b; public int bValue { get { return b; } } } ClassC
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(inti),其中T:class
{
如果(i==1)
{
ClassB objB=新的ClassB();
将objB返回为T;
}
其他的
{
ClassC objC=新的ClassC();
将objC返回为T;
}
}
公共静态void main()
{
objectobj=getObject(5);
obj.aValue=20;
obj.B值=30;
obj.C值=40;
控制台写入线(对象aValue);
控制台写入线(obj.B值);
控制台写入线(对象值);
}
在这种情况下,obj=objC,因此bValue=30和cValue=40应该发生。但我不能这样做。
这是我第三次尝试。我希望至少这次我清楚了 问题似乎在于你问问题的方式 您可以在泛型约束中使用where子句来约束它
我不知道你为什么要强迫一个装箱的对象来实现一个通用的方法…+1,这个建议也是在这个问题的前一个版本中给出的。似乎你应该询问解决问题的最佳方法,而不是如何将方钉塞进圆孔中。1) 没有人能理解为什么泛型应该在这里发挥作用。2) 这两个类是否应该有某种公共接口或基类?3) 如果您试图设置一组或另一组变量,那么必须将其添加到确定返回哪个类的相同逻辑中,那么为什么首先要设置这些类?这不是泛型的用途,我建议您重新阅读一些关于泛型的教程。这是我的第三次尝试。我希望至少这次我清楚了。
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);
}