繁体   English   中英

c# 物业全名 Class

[英]c# Full Name of Property in Class

我有一个 class

public class MyCoolProp
{
    public string FullName {get;set;}
}

在另一个 Class 中,我将其作为属性:

public class MyMainClass
{
    public MyCoolProp coolprop {get;set;}

    public void DoSomething()
    {
        MessageBox.Show(nameof(coolprop.FullName));
    }
}

实际结果是:“全名”

但我想要这样的组合:“coolprop.FullName”

我不想做这样的事情:

nameof(coolprop) + "." + nameof(coolprop.FullName);

也许它可能在扩展中?

如果我将属性重命名为“coolprop”,output 也应该具有新名称

具体取决于您想要什么,您可以使用CallerArgumentExpressionAttribute 这确实意味着您也需要愿意实际评估该属性,即使您不使用它也是如此。

请注意,这需要一个 C# 10 编译器。

这是一个完整的例子:

using System.Runtime.CompilerServices;

public class MyCoolProp
{
    public string FullName { get; set; }
}

class Program
{
    static MyCoolProp CoolProp { get; set; }

    static void Main()
    {
        CoolProp = new MyCoolProp { FullName = "Test" };
        WriteTextAndExpression(CoolProp.FullName);
    }

    static void WriteTextAndExpression(string text,
        [CallerArgumentExpression("text")] string expression = null)
    {
        Console.WriteLine($"{expression} = {text}");
    }
}

Output: CoolProp.FullName = Test

资料来源: 获取变量或参数的名称(根据您的情况进行了一些调整)

您可以使用 System.Linq.Expression 提供的代码示例:

using System.Linq.Expression
class Program
{
    public static MyCoolProp coolProp { get; set; }
    static void Main(string[] args)
    {
        coolProp = new MyCoolProp() { FullName = "John" };
        DoSomething();
    }

    public static string GetMemberName<T>(Expression<Func<T>> memberExpression)
    {
        MemberExpression expressionBody = (MemberExpression)memberExpression.Body;
        return expressionBody.ToString();
    }

    public static void DoSomething()
    {
        string prop = GetMemberName(() => coolProp.FullName);
        Console.WriteLine(prop);
    }

}

public class MyCoolProp
{
    public string FullName { get; set; }
}

GetMemberName方法将返回命名空间、class 名称、object 名称和变量名称(取决于调用方法的位置)

Output: Program.coolProp.FullName

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM