C# 如何测试属性是否已声明为;动态的;?
正如标题所说,在使用反射时,如何测试属性是否已声明为C# 如何测试属性是否已声明为;动态的;?,c#,system.reflection,C#,System.reflection,正如标题所说,在使用反射时,如何测试属性是否已声明为动态 不幸的是使用!在我的例子中,pi.PropertyType.IsValueType不够具体。我找到的唯一方法是查看pi.CustomAttributes数组,并测试它是否包含AttributeType为DynamicAttribute的项。有没有更好的方法来实现这一目标 public class SomeType { public dynamic SomeProp { get; set; } } // ... foreach
动态
不幸的是使用!在我的例子中,pi.PropertyType.IsValueType
不够具体。我找到的唯一方法是查看pi.CustomAttributes
数组,并测试它是否包含AttributeType
为DynamicAttribute
的项。有没有更好的方法来实现这一目标
public class SomeType
{
public dynamic SomeProp { get; set; }
}
// ...
foreach (var pi in typeof(SomeType).GetProperties())
{
if (pi.PropertyType == typeof(string)) { } // okay
if (pi.PropertyType == typeof(object)) { } // okay
if (pi.PropertyType == typeof(dynamic)) { } // The typeof operator cannot be used on the dynamic type
}
谢谢你的回复。我就是这样解决的:
public static class ReflectionExtensions
{
public static bool IsDynamic(this PropertyInfo propertyInfo)
{
return propertyInfo.CustomAttributes.Any(p => p.AttributeType == typeof(DynamicAttribute));
}
}
如果你把你的代码放进去,你可以看到你的代码在幕后发生了什么
using System;
public class C {
public dynamic SomeProp { get; set; }
public void M() {
SomeProp = 3;
}
}
转换为(为了可读性删除了一些内容):
使用系统诊断;
运用系统反思;
使用System.Runtime.CompilerServices;
使用系统安全;
使用System.Security.Permissions;
公共C类
{
[动态]
私有对象k__BackingField;
[动态]
公共对象属性
{
[返回:动态]
得到
{
返回k__BackingField;
}
[参数:动态]
设置
{
k__BackingField=值;
}
}
公屋
{
SomeProp=3;
}
}
SomeProp
属性只是.Net运行时的一个普通对象。附加了[Dynamic]
属性
无法测试动态类型,因为它不是SomeProp
的类型。您应该测试是否存在[Dynamic]
属性。如果您将代码放入,您可以看到代码在幕后发生了什么
using System;
public class C {
public dynamic SomeProp { get; set; }
public void M() {
SomeProp = 3;
}
}
转换为(为了可读性删除了一些内容):
使用系统诊断;
运用系统反思;
使用System.Runtime.CompilerServices;
使用系统安全;
使用System.Security.Permissions;
公共C类
{
[动态]
私有对象k__BackingField;
[动态]
公共对象属性
{
[返回:动态]
得到
{
返回k__BackingField;
}
[参数:动态]
设置
{
k__BackingField=值;
}
}
公屋
{
SomeProp=3;
}
}
SomeProp
属性只是.Net运行时的一个普通对象。附加了[Dynamic]
属性
无法测试动态类型,因为它不是SomeProp
的类型。您应该测试是否存在[Dynamic]
属性。定义“更好”。为什么(你提到的[dynamiccatribute]
对你来说“足够好”?定义“更好”的可能重复。为什么(你提到的[DynamicAttribute]
对你来说“足够好”呢?可能是重复的