我想使用以下C#6代码
var joe = new Self();
Console.WriteLine(joe);
Run Code Online (Sandbox Code Playgroud)
...并获得以下输出:
乔
以下尝试
class Self {
public string Name { get; set; } = nameof(this);
public override string ToString() {
return Name;
}
}
Run Code Online (Sandbox Code Playgroud)
因为nameof无法应用而失败this.这个问题有解决方法吗?
编辑.我正在使用的场景确保没有两个引用指向同一个Self对象.
Jon*_*eet 14
不,nameof旨在引用您所指的成员的编译时名称.如果你想要一个对象有一个Name属性作为其状态的一部分,是独立的,你是如何得到的Name财产-如弗雷德里克·哈米迪说,有可能是多个变量(或无)指的是同一个对象.基本上,您需要区分对象和恰好引用该对象的变量.
但是,如果您有一个构造函数来指定名称,那么您可以使用一些技巧来更容易地获得正确的名称:
class Self
{
public string Name { get; }
public Self([CallerMemberName] string name = null)
{
this.Name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
class Foo
{
private Self me = new Self(); // Equivalent to new Self("me")
public void SomeMethod()
{
// Can't use the default here, as it would be "SomeMethod".
// But we can use nameof...
var joe = new Self(nameof(joe));
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
也许您可以使用以下方法:
class Self
{
public override string ToString()
{
return this.GetType().Name;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以简单地使用nameof变量本身:
Console.WriteLine(nameof(joe));
Run Code Online (Sandbox Code Playgroud)
这是一个使用当前Roslyn版本的工作示例
| 归档时间: |
|
| 查看次数: |
5945 次 |
| 最近记录: |