c#语言typeof用法,c# – nameof和typeof之间的区别

纠正我,如果我错了,但做某事

var typeOfName = typeof(Foo).Name;

var nameOfName = nameof(Foo);

“Using nameof helps keep your code valid when renaming definitions”

如果要将类实例作为字符串获取,则不可能做到这样:

var fooInstance = new Foo();

var nameOfName = nameof(fooInstance);

但是,您可以执行以下操作:

static string GetName(T item) where T : class

{

return typeof(T).GetProperties()[0].Name;

}

var typeOfName2 = GetName(new { fooInstance });

在这两种情况(typeof和nameof)中,重构是可能的,所以我没有看到任何其他原因来重新创建另一个更高级别的关键字,例如nameof来执行已经存在的内容.他们之间有什么区别,我不清楚吗?

最后,如果有人指点参考资料来查看nameof的实现,我将不胜感激.它使用反射?

更新1:

取自here

nameof显然与声明一个字符串变量一样高效.没有反思或无论如何!

var firstname = "Gigi";

var varname = nameof(firstname);

Console.WriteLine(varname); // Prints "firstname" to the console

当您查看生成的MSIL时,您将看到它等同于一个字符串声明,因为使用ldstr运算符将字符串的对象引用推送到堆栈:

IL_0001: ldstr "Gigi"

IL_0006: stloc.0

IL_0007: ldstr "firstname"

IL_000c: stloc.1

IL_000d: ldloc.1

IL_000e: call void [mscorlib]System.Console::WriteLine(string)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值