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);
typeof的用法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)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论