得到一个字段的使用反射在C#的属性(Getting the attributes of a fiel

2019-07-17 21:23发布

我写道,从像这样的对象提取领域的方法:

private static string GetHTMLStatic(ref Object objectX, ref List<string> ExludeFields)
{
    Type objectType = objectX.GetType();
    FieldInfo[] fieldInfo = objectType.GetFields();

    foreach (FieldInfo field in fieldInfo)
    {
        if(!ExludeFields.Contains(field.Name))
        {
            DisplayOutput += GetHTMLAttributes(field);
        }                
    }

    return DisplayOutput;
}

在我的课每场也有它自己的属性,在这种情况下,我的属性被称为HTMLAttributes。 在foreach循环,我试图让每个字段的属性和它们各自的值。 目前,它看起来像这样:

private static string GetHTMLAttributes(FieldInfo field)
{
    string AttributeOutput = string.Empty;

    HTMLAttributes[] htmlAttributes = field.GetCustomAttributes(typeof(HTMLAttributes), false);

    foreach (HTMLAttributes fa in htmlAttributes)
    {
        //Do stuff with the field's attributes here.
    }

    return AttributeOutput;
}

我的属性类如下所示:

[AttributeUsage(AttributeTargets.Field,
                AllowMultiple = true)]
public class HTMLAttributes : System.Attribute
{
    public string fieldType;
    public string inputType;

    public HTMLAttributes(string fType, string iType)
    {
        fieldType = fType.ToString();
        inputType = iType.ToString();
    }
}

这似乎是合乎逻辑的,但它不会编译,我在GetHTMLAttributes(红色波浪线)方法下:

field.GetCustomAttributes(typeof(HTMLAttributes), false);

本场我试图提取属性的是像这样使用另一个类:

[HTMLAttributes("input", "text")]
public string CustomerName;

从我的理解(或缺乏)这应该工作? 请扩大我的脑海开发伙伴!

*编辑器,编译器错误

无法隐式转换类型“对象[]”到“data.HTMLAttributes []”。 一个显式转换存在(是否缺少强制转换?)

我试图铸造这样的:

(HTMLAttributes)field.GetCustomAttributes(typeof(HTMLAttributes), false);

但是,这也不起作用,我得到这个编译器错误:

无法将类型“对象[]”到“data.HTMLAttributes”

Answer 1:

GetCustomAttributes方法返回一个object[]HTMLAttributes[] 它返回原因object[]是,它已经有自1.0,前.NET泛型看一天的光。

您应该手动返回值来投每个项目HTMLAttributes

要解决你的代码,你只需要将该行更改为:

object[] htmlAttributes = field.GetCustomAttributes(typeof(HTMLAttributes), false);

foreach会照顾剧组的为您服务。

更新:

不应该返回数组转换为HTMLAttributes[] 返回值是不是HTMLAttributes[] 这是一个object[]类型的含元素HTMLAttributes 。 如果你想有一个HTMLAttribute[]类型的对象(你不要在这个特定的代码片段需要, foreach就足够了),你应该单独投阵列的每个元素HTMLAttribute ; 也许使用LINQ:

HTMLAttributes[] htmlAttributes = returnValue.Cast<HTMLAttributes>().ToArray();


文章来源: Getting the attributes of a field using reflection in C#