如何动态通过课程? (编辑)
用名称字符串=(

我想将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属性在A1A2上都可以访问,因为它是在基类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/

10-11 20:13