如何动态通过课程? (编辑)
用名称字符串=(
我想将A1或A2传递给getData函数
有什么想法或建议可以支持我吗?
public class A1{
public int dataA1 {get;set;}
}
public class A2{
public int dataA2 {get;set;}
}
Type obj= Type.GetType("A2");;
var example = GetData<obj>();
public void GetData<T>(){
//process T custom (A1 or A2) T = A2
}
最佳答案
您应该声明一个基类ABase
(或使用更好的名称),然后将其用作通用处理的基础:
public class ABase
{
public int data { get; set; }
}
public class A1 : ABase {
... implementation that presumably sets data
}
public class A2 : ABase {
... implementation that presumably sets data
}
var example = GetData<ABase>();
public void GetData<T>() where T : ABase {
// Do something with T which can be A1 or A2 but supports GetData
}
在
GetData<T>
中,您现在可以保证data
属性在A1
和A2
上都可以访问,因为它是在基类ABase
上声明的。或者,您可以实现定义该属性的接口:
public interface IBase
{
int data { get; set; }
}
public class A1 : IBase {
// Implement the interface here
public int data { get; set; }
}
...
编辑以下@AnuViswan评论
正如任何Viswan所指出的那样,在您的示例(因此也是我的示例)中,
GetData<T>
不返回任何内容,但是将var example
设置为方法的结果。毫无疑问,这是您的示例中的错字。我猜想
GetData<T>
应该返回一个int
。关于c# - 动态调用<T>对象类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59411990/