C#中OfType不可用时,如何获取特定的自定义属性?
How to obtain a specific custom attribute when OfType is not available in C#?
在我的应用程序中,我尝试使用 foreach 循环获取特定属性:
foreach 的数据源:
现在我想检查每个 属性 是否具有“EditTemplate”CustomAttribute,如果 属性 具有它,则将此属性放入这样的变量中:
前叉:
@foreach (var property in EditObject.GetType().GetProperties())
{
var attributes = property.GetCustomAttributes(true);
var DoSomeAttribute = attributes;
//THIS IS THE PART THAT DOES NOT WORK BECAUSE .OfType is not recognized
//var attribute = property.GetCustomAttributes(true).OfType<EditTemplateAttribute>().FirstOrDefault();
}
代码行“var attributes = property.GetCustomAttributes(true)”给我一个包含 x 个项目(属性在其中)的对象:
现在这是我要检查属性是否属于“EditTemplateAttribute”类型的地方,如果是这种情况,我想将其放入这样的变量中:
在另一段代码(和另一个 foreach)中,我通过以下方式实现了这一点:
var attribute = property.GetCustomAttributes(true).OfType<EditTemplateAttribute>().FirstOrDefault();
但是 .OfType 在这里不可用。
有人知道如何实现吗?
提前致谢!
我不知道为什么 .OfType 应该不可用。
尝试添加 using System.Linq
。这是定义 OfType 扩展方法的命名空间。
我注意到您的 foreach 以“@”为前缀。您使用的是 MVC Razor 视图吗?
在这种情况下,您可以使用以下方式添加:@using System.Linq
在任何情况下,您都可以将 .OfType<EditTemplateAttribute>()
替换为:
.Where(x => x is EditTemplateAttribute).Select(x => (EditTemplateAttribute)x)
或者您可以使用(可能 return 属性实例或 null):
var someAttribute = (EditTemplateAttribute)attributes.FirstOrDefault(x => x is EditTemplateAttribute);
或者,您可以编写自己的 OfType 扩展方法(并按照您的意愿使用它):
public static IEnumerable<TResult> OfType<TResult>(this IEnumerable source)
{
foreach (object obj in source)
{
if (obj is TResult)
yield return (TResult) obj;
}
}
在我的应用程序中,我尝试使用 foreach 循环获取特定属性:
foreach 的数据源:
现在我想检查每个 属性 是否具有“EditTemplate”CustomAttribute,如果 属性 具有它,则将此属性放入这样的变量中:
前叉:
@foreach (var property in EditObject.GetType().GetProperties())
{
var attributes = property.GetCustomAttributes(true);
var DoSomeAttribute = attributes;
//THIS IS THE PART THAT DOES NOT WORK BECAUSE .OfType is not recognized
//var attribute = property.GetCustomAttributes(true).OfType<EditTemplateAttribute>().FirstOrDefault();
}
代码行“var attributes = property.GetCustomAttributes(true)”给我一个包含 x 个项目(属性在其中)的对象:
现在这是我要检查属性是否属于“EditTemplateAttribute”类型的地方,如果是这种情况,我想将其放入这样的变量中:
在另一段代码(和另一个 foreach)中,我通过以下方式实现了这一点:
var attribute = property.GetCustomAttributes(true).OfType<EditTemplateAttribute>().FirstOrDefault();
但是 .OfType 在这里不可用。
有人知道如何实现吗?
提前致谢!
我不知道为什么 .OfType 应该不可用。
尝试添加 using System.Linq
。这是定义 OfType 扩展方法的命名空间。
我注意到您的 foreach 以“@”为前缀。您使用的是 MVC Razor 视图吗?
在这种情况下,您可以使用以下方式添加:@using System.Linq
在任何情况下,您都可以将 .OfType<EditTemplateAttribute>()
替换为:
.Where(x => x is EditTemplateAttribute).Select(x => (EditTemplateAttribute)x)
或者您可以使用(可能 return 属性实例或 null):
var someAttribute = (EditTemplateAttribute)attributes.FirstOrDefault(x => x is EditTemplateAttribute);
或者,您可以编写自己的 OfType 扩展方法(并按照您的意愿使用它):
public static IEnumerable<TResult> OfType<TResult>(this IEnumerable source)
{
foreach (object obj in source)
{
if (obj is TResult)
yield return (TResult) obj;
}
}