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”来访问它,这是我创建实例时在构造函数中设置的。