gpt4 book ai didi

c# - 如何处理 nameof(this) 报告类名

转载 作者:可可西里 更新时间:2023-11-01 08:38:06 24 4
gpt4 key购买 nike

我想使用下面的 C#6 代码

var joe = new Self();
Console.WriteLine(joe);

...并获得以下输出:

joe

下面的尝试

class Self {
public string Name { get; set; } = nameof(this);
public override string ToString() {
return Name;
}
}

失败,因为 nameof 不能应用于 this。这个问题有解决方法吗?

编辑。我正在处理的场景确保没有两个引用指向同一个 Self 对象。

最佳答案

不,nameof 旨在引用您所引用的成员的编译时名称。如果您希望对象将 Name 属性作为其状态的一部分,这与您获取 Name 属性的方式无关 - 如Frédéric Hamidi 说,可能有多个变量(或没有)指向同一个对象。基本上,您需要区分对象和恰好引用该对象的变量。

但是,如果您有构造函数来指定名称,则可以使用一些技巧来更轻松地获得正确的名称:

class Self
{
public string Name { get; }

public Self([CallerMemberName] string name = null)
{
this.Name = name;
}
}

然后:

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));
}
}

关于c# - 如何处理 nameof(this) 报告类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27837867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com