c# - 检查 T 泛型类型是否具有 C# 中的属性 S(泛型)

标签 c# generics reflection properties typeof

A级

class A{
...
}

B级

 class B:A{
    ...
 }

C类

 class C:A{
    B[] bArray{get;set;}
 }

我想检查 T 是否具有 S 属性类型,创建 S 实例并分配给该属性:

public Initial<T,S>() where T,S : A{
   if(T.has(typeof(S))){
      S s=new S();
      T.s=s;
   }
}

最佳答案

最好也是最简单的方法是使用接口(interface)实现此功能。

public interface IHasSome
{
    SomeType BArray {get;set;}
}

class C:A, IHasSome
{
    public SomeType BArray {get;set;}
}

然后您可以在通用方法中强制转换对象:

public T Initial<T,S>() where T : new() where S : SomeType, new()
{
    T t = new T();

    if (t is IHasSome)
    {
        ((IHasSome)t).BArray = new S();
    }

    return t;
}

如果这不合适,您可以使用反射来检查属性并检查它们的类型。相应地设置变量。

关于c# - 检查 T 泛型类型是否具有 C# 中的属性 S(泛型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35196745/

相关文章:

c# - Selection.Find.Font.Position 允许十进制值

c# - 为什么 Entity Framework Core 急于加载不包含的相关实体

java - 关于Java泛型的查询

java - 根据实际对象类型进行动态引用转换

C# - 解析异常失败?

c# - C# 中的文件路径问题(主页

ios - 将参数传递给实现协议(protocol)并快速扩展类的方法

java - 为什么 Java 不提示通用 map 转换?

Java 6 注释带或不带参数重复

c# - 如何在 C# 中找到对象的所属程序集