【问题标题】:How To Call Variable Name From Another Class C#如何从另一个类 C# 调用变量名
【发布时间】:2022-01-04 20:59:23
【问题描述】:

代码示例

class Main{
        Name Jack = new Name();
        Jack.Speak();
}

class Name{
     public string speak(){
        Console.WriteLine("Hello", valuename);
      }
      
     public Name()
     {
       valuename = nameof(Jack); 
     }
}

输出我搜索的内容:

Hello Jack. 

如果用户输入Name Joe = new Name();,输出将是Hello Joe.

【问题讨论】:

  • 在类名中,您尝试在public Name() 中引用的变量jack 超出范围
  • C# 中没有允许对象访问其变量名的机制。您可以想象,如果存在这样的行为,如果您将 Name 对象传递给使用不同变量名的方法,则会导致严重问题。
  • 考虑var Jack = new Name(): var Bill = Jack;。一个对象具有属性和身份,但它不知道引用它的变量。而且,正如@Ryan 提到的,变量有范围

标签: c# class oop


【解决方案1】:

局部变量名是语法糖,大部分被编译器丢弃,所以没有直接的方法来做到这一点。

最接近的方法是使用[CallerArgumentExpression] 让编译器捕获传递给参数的源代码表达式,但这仅适用于方法参数并将捕获整个表达式,而不仅仅是变量名。例如,下面的程序将打印jack 然后jack + "hello"

using System;
using System.Runtime.CompilerServices;

class Program {
    static void Main()
    {
        var jack = "dummy";
        WriteExpression(jack);
        WriteExpression(jack + "hello");
    }

    static void WriteExpression(
        string param, 
        [CallerArgumentExpression("param")] string paramExpression = null
    ) => Console.WriteLine(paramExpression);
}

【讨论】:

    猜你喜欢
    • 2020-10-09
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2020-10-13
    • 2013-01-26
    • 1970-01-01
    相关资源
    最近更新 更多