gpt4 book ai didi

c# - 如何对长属性路径使用 nameof 来获取 "fullnameof"?

转载 作者:行者123 更新时间:2023-12-05 01:36:06 25 4
gpt4 key购买 nike

我有以下声明:

queryPublications += $" AND CC_Publication__r.CC_External_ID__c IN ({inPublicationExtIds})";

现在我想使用 nameof expression获得名称的编译时安全性,以防将来发生变化。但是修改后的代码不再好看了:

queryPublications += $" AND {nameof(CC_Publication_Subscription__c.CC_Publication__r)}.{nameof(CC_Publication_Subscription__c.CC_Publication__r.CC_External_ID__c)} IN ({inPublicationExtIds})";

考虑有更多字段或属性路径(正确的术语是什么?)甚至更长:

AND Class1.Prperty1.Class2.Property2.Class3.Property3 IN

代码变得非常丑陋,你很容易出错。您必须重复当前部分之前的整个部分。

有什么方法(扩展或技术)可以简化我的方法吗?

如果有一个fullnameof来获取完整路径就好了。

最佳答案

您可以使用表达式树来获取表达式成员的名称:

public static string NameOf<T>(Expression<Func<T>> pathExpr)
{
var members = new Stack<string>();
for (var memberExpr = pathExpr.Body as MemberExpression; memberExpr != null; memberExpr = memberExpr.Expression as MemberExpression)
{
members.Push(memberExpr.Member.Name);
}
return string.Join(".", members);
}

如果你这样调用它:

NameOf(() => CC_Publication_Subscription__c.CC_Publication__r.CC_External_ID__c)

它将返回 "CC_Publication_Subscription__c.CC_Publication__r.CC_External_ID__c"

关于c# - 如何对长属性路径使用 nameof 来获取 "fullnameof"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62308727/

25 4 0
文章推荐: Django 序列化程序多对多返回名称数组而不是 ID 数组
文章推荐: 来自 appsettings 的 C# 强类型 ConfigurationBuilder List