这是在即时控制台:
prop.GetCustomAttributes(typeof(RequiredParameterAttribute),true)
{BridgeStack.DataContracts.RequiredParameterAttribute [0]}
prop.GetCustomAttributes(typeof(RequiredParameterAttribute),true).Cast<RequiredParameterAttribute>()
{BridgeStack.DataContracts.RequiredParameterAttribute [0]}[BridgeStack.DataContracts。RequiredParameterAttribute []]: {BridgeStack.DataContracts.RequiredParameterAttribute [0]}
prop.GetCustomAttributes(typeof(RequiredParameterAttribute),true).Cast<RequiredParameterAttribute>().Any()
假
我在应用程序中得到了相同的结果。
prop
是Site
在:
public class AnswerCollectionQuery : IPagedQuery, ISiteQuery, ISortableQuery, IOrderableQuery, IFilteredQuery
{
public int? Page { get; set; }
public int? PageSize { get; set; }
public string Site { get; set; }
[AllowedSortValues(QuerySortEnum.Activity, QuerySortEnum.Creation, QuerySortEnum.Votes)]
public QuerySortEnum? Sort { get; set; }
public object Min { get; set; }
public object Max { get; set; }
public DateTime? FromDate { get; set; }
public DateTime? ToDate { get; set; }
public QueryOrderEnum? Order { get; set; }
public string Filter { get; set; }
}
Site
依次来自ISiteQuery
public interface ISiteQuery : IQuery
{
[RequiredParameter]
string Site { get; set; }
}
尴尬的部分是控制台显示属性,允许我强制转换它,但我根本无法检索它,我得到零作为枚举的长度,这就是为什么.Any()
失败,同样,.FirstOrDefault()
返回null
, .First()
抛出,等等。
对这种行为有什么解释吗?
PD:如果我在具体类中用[RequiredAttribute]
装饰Site
,这是有效的。但是我想让它成为界面的一部分。
更新为清晰:
prop
正好来自这里:
public static IEnumerable<PropertyInfo> GetAllProperiesOfObject(object o)
{
const BindingFlags flags = BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.Instance;
PropertyInfo[] list = o.GetType().GetProperties(flags);
return list;
}
foreach (PropertyInfo prop in Utility.GetAllProperiesOfObject(entity))
当prop
变成Site
0是因为它返回给您一个零长度类型的数组,这意味着:它没有属性。您也可以在Attribute中看到这一点。IsDefined(将返回false).
当使用隐式接口实现时,类的公共属性不会自动从它所满足的接口获得属性。要查看接口上的属性,您需要使用
typeof(ITheInterface).GetProperties()
接口上的Site属性与类上的Site属性无关。如果类上的属性必须有属性:显式地添加属性