gpt4 book ai didi

c# - 使用引用另一个变量的 nameOf 打印变量的名称?

转载 作者:行者123 更新时间:2023-12-01 07:50:51 24 4
gpt4 key购买 nike

我有一个类的多个实例,我想在一个数组中跟踪这些实例,该数组包含我无法控制的此类类型。为此,我创建了一个 List<MyClass>然后我将其与 MyClass[] 中的每个值进行比较我无法控制。

然后,我使用 C#6.0 运算符 nameOf 打印出类引用的名称。 。令我惊讶的是(现在原因很明显了)当我从 List 检查类引用时打印类引用的名称。打印循环变量名称而不是它引用的类引用。

有没有办法打印被另一个变量引用的变量的名称?

(此外,这个问题使用的正确术语是什么,我感觉我把它宰了?)


以下是使用 Control 的问题示例

Control x = new Control();
Control y = new Control();
Control z = new Control();
var controlArr = new Control[] { x, y, z };
var controlList = new List<Control>() { x, y, z };
for (int i = 0; i < controlArr.Length; i++)
{
Control anArrControl = controlArr[i];
foreach (var aListControl in controlList)
if (anArrControl == aListControl)
Console.Out.WriteLine("Control[" + i + "]: " + nameof(aListControl));
}

此代码将打印

Control[0]: aListControl 
Control[1]: aListControl
Control[2]: aListControl

而不是

Control[0]: x
Control[1]: y
Control[2]: z

编辑:这个例子很简单,因为如果 Control[] List<Control> 中不包含引用不会打印任何内容。在我的实际应用中我会处理这个问题。我只是简单地放了示例代码来演示我提出问题时的意思,我觉得我的措辞不太正确。

最佳答案

关于MSDN您会找到激发创建 nameof 函数的用例引用。引用的名称不是在编译时定义的。鉴于

 var a = new object();
var b = a;
var array = new [] {a, b}

nameof(array[1]) 应该返回什么?它是同一个引用的对象。

因此,您必须考虑另一种解决方法来实现您的目标。也许一本字典可以帮助你。喜欢

Control x = new Control();
Control y = new Control();
Control z = new Control();
var references = new Dictionary<Control, string> {
{ x, "x" }, { y, "y" }, {z, "z"}
};
var controlArr = new Control[] { x, y, z };
var controlList = new List<Control>() { x, y, z };
for (int i = 0; i < controlArr.Length; i++)
{
Control anArrControl = controlArr[i];
foreach (var aListControl in controlList)
if (anArrControl == aListControl)
Console.Out.WriteLine("Control[" + i + "]: " + references[aListControl]);
}

关于c# - 使用引用另一个变量的 nameOf 打印变量的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40140798/

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