我可以在c#的变量中使用第一个字母作为$吗?

我可以在c#的变量中使用第一个字母作为$吗?,c#,C#,我调用了$id变量,它在生成后出现在控制台中:“error对于声明的类、结构或接口的成员无效” 是否有人以前遇到过此类错误,或者知道如何绕过此问题 代码如下: string $id = "xxxxx-xxxx-xxxxx"; 不,你不能那样做 $在C#标识符中不是合法字符 在C#中,没有办法绕过这一点 关于C#标识符的确切规则,请参见本页- 基本上: 标识符必须以字母或\开头 标识符可以包含Unicode字母字符、十进制数字字符、Unicode连接字符、Unicode组合字符或Unicod

我调用了
$id
变量,它在生成后出现在控制台中:“error对于声明的类、结构或接口的成员无效”

是否有人以前遇到过此类错误,或者知道如何绕过此问题

代码如下:

string $id = "xxxxx-xxxx-xxxxx";

不,你不能那样做

$在C#标识符中不是合法字符

在C#中,没有办法绕过这一点


关于C#标识符的确切规则,请参见本页-

基本上:

  • 标识符必须以字母或\开头
  • 标识符可以包含Unicode字母字符、十进制数字字符、Unicode连接字符、Unicode组合字符或Unicode格式字符。有关Unicode类别的详细信息,请参阅Unicode类别数据库。您可以通过在标识符上使用@前缀来声明与C#关键字匹配的标识符。@不是标识符名称的一部分。例如,@if声明一个名为if的标识符。这些逐字标识符主要用于与以其他语言声明的标识符的互操作性

$不在这些规则的范围内,因此是不允许的。

我强烈反对使用类似的名称,但您仍然可以使用非法字符命名您的属性。使用属性与生成属性一样痛苦>

var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("MyAssembly"),
    AssemblyBuilderAccess.RunAndSave);
var modulBuilder = assemblyBuilder.DefineDynamicModule("MyModul");
var longType = typeof(long);
TypeBuilder typeBuilder = modulBuilder.DefineType("MyObjectChild", TypeAttributes.Class);
FieldBuilder fieldBuilder = typeBuilder.DefineField("m_$id", longType, FieldAttributes.Private);
var propertyBuilder = typeBuilder.DefineProperty("$id", PropertyAttributes.HasDefault, longType, null);
MethodAttributes propertyAttributes = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig;
MethodBuilder getBuilder = typeBuilder.DefineMethod("get_$id", propertyAttributes, longType, Type.EmptyTypes);
ILGenerator getGen = getBuilder.GetILGenerator();
getGen.Emit(OpCodes.Ldarg_0);
getGen.Emit(OpCodes.Ldfld, fieldBuilder);
getGen.Emit(OpCodes.Ret);

//set method
MethodBuilder setBuilder = typeBuilder.DefineMethod("set_$id", propertyAttributes, null, new [] { longType });
ILGenerator setGen = setBuilder.GetILGenerator();
setGen.Emit(OpCodes.Ldarg_0);
setGen.Emit(OpCodes.Ldarg_1);
setGen.Emit(OpCodes.Stfld, fieldBuilder);
setGen.Emit(OpCodes.Ret);
propertyBuilder.SetSetMethod(setBuilder);
propertyBuilder.SetGetMethod(getBuilder);
var createdType = typeBuilder.CreateType();
var childObject = Activator.CreateInstance(createdType, BindingFlags.CreateInstance, null, new object[0],
    CultureInfo.InvariantCulture);
var myNewType = childObject.GetType();
foreach (var propertyInfo in myNewType.GetProperties())
{
    // you can see the $id property there.
    Console.WriteLine(propertyInfo.Name);
}

请首先检查导入的类是否可以为您提供至少C#side重命名属性的功能

有什么问题吗?只是不要在标识符中使用非法字符。编译器不会让你的。是的,好的,我明白。这是一种快速而简单的方法,但是有什么逃跑的方法吗?我不完全确定你是否理解,因为我告诉你,编译器不会让你这么做。你可以使用
@
来转义任何保留关键字,如
@for
@Xiaoy312。我尝试使用@,但无效。非常感谢你的回复,但我想告诉其他人,我不同意他们对我的处理。我被认为是个白痴。我想这样说,因为他们曾多次试图嘲笑我,但幸运的是,有两个人对这个问题给出了相关的答案。我是一名专业人士,我不是来取笑任何人的善待他人,经常倾听沉默的人,我会尽力做到最好。非常感谢你P