c#我能省略这个`名字'吗#所以我不';你不必把它作为参数传递吗?

c#我能省略这个`名字'吗#所以我不';你不必把它作为参数传递吗?,c#,C#,因此,这是可行的: 类别: public class c_entry { public string Name { get; private set; } public c_entry(string name) { Name = name; } } 创建实例并将变量名作为参数发送 public void method() { c_entry c = new c_entry(nameof(c)); } 但是我真正想做的是通过从类内部引用

因此,这是可行的:

类别:

public class c_entry
{
    public string Name { get; private set; }

    public c_entry(string name)
    {
        Name = name;
    }
}
创建实例并将变量名作为参数发送

public void method()
{
    c_entry c = new c_entry(nameof(c));
}
但是我真正想做的是通过从类内部引用其实例来设置
Name
,这样我就不必将
nameof(instance)
作为参数传递

public class c_entry
{
    public string Name { get; private set; }

    public c_entry()
    {
        Name = nameof(this); // This line won't compile because "this" expression doesn't have a name
    }
}

我认为这是不可能的-但是它是吗?不,你不能,因为它没有意义。实例没有一个单独的名称

var x = new YourClass(); // you might think this is named x

new YourClass(); // what's the name now? okay, maybe name should be nullable?

var x = new YourClass();
var y = x; // and now? 
           // What name should the single instance have now? 
           // should each instance have a list of names?

不应该是可能的,因为您可以为您的对象提供任意多的名称。如果可以让编译器为您提供名称,您希望传递的名称到底是什么?周围成员的名称(
c_entry
)?变量的名称(
name
在最后一段代码中,而
c
在前一段代码中)?周围成员的名称可以使用属性完成,请参见,但变量的名称没有这样的技巧。另一个问题是为什么你认为你需要它?为什么要通知对象您将引用/值存储到其中的第一个变量的名称?另外,如果
c_条目c2=c
,现在您有两个变量,是否也要传入此名称?在构造时,对象不知道将来任何时候可能存在多少对该对象的引用,也不知道何时或如何将这些引用分配给任何特定的命名变量。“试图删除名称的重复使用”-否,
c
“c”
将双重使用该名称
nameof(c)
是一个完全重构安全的单点定义。它仍然取决于需求-可能是使用目标变量作为默认值。所以两个类应该是“x”,中间一个为空。一个字符串已经可以为空。是的,它没有一个单独的名称,我可能希望能够使用它的所有不同名称引用它,但我肯定希望能够通过迭代这些对象的列表并检查初始实例
名称
“c”来访问它,这是我创建实例时在构造函数中设置的。