C# 在运行时更改变量类型

C# 在运行时更改变量类型,c#,variables,reflection,types,C#,Variables,Reflection,Types,今天我在学校遇到了一个挑战,我屈服了,不知道如何去实现它。 有没有一种方法可以将字符串声明为常量和加载事件,可以使用反射将字符串更改为非常量从XML中分配一个值,而不是再次将其更改为常量 所有这样做的代码(从常量到非常量)都应该存储在字符串中,在类型更改之前加载时,应该解密并注入应用程序 示例: private const String RegNumber = ""; //Change RegNumber to Writable String //Change RegNumber value /

今天我在学校遇到了一个挑战,我屈服了,不知道如何去实现它。 有没有一种方法可以将字符串声明为常量和加载事件,可以使用反射将字符串更改为非常量从XML中分配一个值,而不是再次将其更改为常量

所有这样做的代码(从常量到非常量)都应该存储在字符串中,在类型更改之前加载时,应该解密并注入应用程序

示例:

private const String RegNumber = "";
//Change RegNumber to Writable String
//Change RegNumber value
//Than Change RegNumber back to const again

PS:对不起,我不知道从哪里开始,在这里展示一些代码。

理论上是可能的。看

如何使用C#编译器以编程方式编译代码

您可以用字符串编写代码,并使用上述文章中提到的API进行编译

我以前没有这样做过,但它应该给你一个如何开始的想法

也看,


您不能将其声明为
const
,但可以将其声明为
静态只读

private static readonly string Foo = ReadValueFromAssembly();

static string ReadValueFromAssembly()
{
    // Perform your logic and return the string here
}
这能满足你的所有需要吗?关于“应该对[…]进行解密并将其注入应用程序的代码”的含义并不十分清楚,但您可以让上述方法按照正常方式执行任何需要执行的操作

作为补充说明,在这样的类型初始值设定项中进行大量工作通常不是一个好主意


编辑:您可以将代码存储为字符串,在执行时使用编译,然后执行编译后的代码。我有一个例子,我在其中使用C#Depth作为编译代码段的快速工具。

它甚至可能在运行时不存在,编译器可以用它们的文本值替换它的所有用法(事实上,它可能有,尽管我认为标准并不要求它)


所以不,我不明白这怎么可能。

这个问题没有任何意义。“请重读一遍。”杰森请再读一遍,告诉我你不明白的地方!您不能使用Reflections更改常量值,所以在运行时无法将常量更改为非常量?@Cody:如果您可以将其初始化为正确的值,为什么要这样做?@Jon Skeet我只是想知道我是否可以实现,所以请告诉我这是否可行!让我澄清一下,我需要在运行时从字符串中注入代码标记,所以我可以将C#语法存储到声明的字符串中,并在运行时注入它吗?