【问题标题】:Testing properties with reflection using attributes使用属性通过反射测试属性
【发布时间】:2023-04-02 18:41:01
【问题描述】:

我正在尝试创建一个 nUnit 测试来执行以下操作:

1) 加载要测试的 DLL。
2) 在各种类型之间进行迭代。
3) 找到具有特定自定义属性的那些。
4) 实例化这些类型并确保它们的所有公共属性都不为空。

这是我到目前为止写的:

Assembly assembly = Assembly.LoadFile("MyLib.dll");  
foreach (Type type in assembly.GetTypes()) {  
    if (type.GetCustomAttributes(typeof(CustomAttribute), false).Length != 0) {  
        Object instance = Activator.CreateInstance(type);  
        foreach (PropertyInfo propertyInfo in type.GetProperties()) {  
            // how to go on from here?
        }  
    }  
}  

如您所见,假设其余代码正确,我不知道如何通过测试空值来完成。

【问题讨论】:

    标签: c# .net reflection properties attributes


    【解决方案1】:

    以这种方式获取值:

    object value = propertyInfo.GetValue(instance, null);
    
    if (value == null)
       //Null value
    else if (DBNull.Value.Equals(value))
       //DB Null
    

    【讨论】:

    • +1 - 您可能还想在 GetValue 调用中添加异常处理,因为被调用者可能会实现可能产生异常的自定义 getter。
    • 效果很好,谢谢。如果其他人需要此说明,请注意我发布的问题代码中存在错误。要检查自定义属性,我必须在所有属性之间进行迭代以找到我正在寻找的那个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2011-09-29
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多