[英]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.