Reflection “这对”意味着什么;将字段标记为“文字”;在.NET的世界里?

Reflection “这对”意味着什么;将字段标记为“文字”;在.NET的世界里?,reflection,Reflection,根据微软的文档,FieldInfo.GetValue(object)将抛出一个NotSupportedException,如果: 字段标记为文字,但该字段没有 接受的文字类型。” 我不知道这对我意味着什么 “将字段标记为文字。” 我想了解这一点,以便知道如何防范此异常。请查看: 获取一个值,该值指示是否在编译时写入该值 不能改变 IsLiteral属性是在FieldAttributes.Literal 属性已设置。如果设置了此属性,则无法删除该字段 变化的,不变的 literal是一个const

根据微软的文档,
FieldInfo.GetValue(object)
将抛出一个
NotSupportedException
,如果:

字段标记为文字,但该字段没有 接受的文字类型。”

我不知道这对我意味着什么

“将字段标记为文字。”

我想了解这一点,以便知道如何防范此异常。

请查看:

获取一个值,该值指示是否在编译时写入该值 不能改变

IsLiteral属性是在FieldAttributes.Literal 属性已设置。如果设置了此属性,则无法删除该字段 变化的,不变的


literal
是一个
const
字段。每个const字段都在编译时通过从文本初始化来确定其值。看看这个代码

using System;
using System.Reflection;


public class Program
{
    const int literal_int = 5;
    readonly int literal_int_two = 5;
    const string literal_string = "Fun";
    const Random literal_random = null;
    int non_literal;

    public static void Main()
    {
        foreach (FieldInfo f in typeof(Program).GetFields(BindingFlags.Instance 
        | BindingFlags.NonPublic
        | BindingFlags.Static
        | BindingFlags.FlattenHierarchy))
        {
            Console.WriteLine("{0} is literal - {1}", f.Name, f.IsLiteral);
            try
            {
                Console.WriteLine("GetValue = {0}", f.GetValue(null));
            }
            catch{}
        }
    }
}
输出:

literal_int is literal - True
GetValue = 5
literal_int_two is literal - False
literal_string is literal - True
GetValue = Fun
literal_random is literal - True
GetValue = 
non_literal is literal - False
但是,

但是该字段没有一个可接受的文本类型

是开放的解释,我找不到一个没有“一个可接受的文字类型”(不管这意味着什么)的文字的例子


通过简单地查看,我找不到一段相对的代码来代表这个异常。您可以放心忽略此条款。

所述的例外情况

字段标记为文字,但该字段没有一种可接受的文字类型

。。。必须与动态或自定义代码(而不是通过反射收集)创建的
FieldInfo
实例相关,在这些实例中,某些验证常常被延迟或忽略


FieldInfo
对象包含表示字段的元数据,但其类是可继承的,任何派生实现都可能允许错误的类型条件。

您是指FieldInfo.GetValue(对象)吗?是的,我是指FieldInfo.GetValue(对象)。谢谢你帮我改正错误。谢谢,他们。我现在知道“将字段标记为文字”是什么意思了。这并不能回答问题。谢谢,马克。我已经阅读StackOverflow很多年了,但直到今天我才成为一个积极的参与者。我很惊讶我的问题得到如此迅速和彻底的回答。作为一名参与者,我有很多事情要做。A+1用于链接到.Net源代码。@RockAnthonyJohnson总是乐于帮助:)