带有演员的名称

  • 本文关键字: c# casting nameof
  • 更新时间 :
  • 英文 :


我想使用名称以获取属性的名称。

以下工作:

DerivedClass EC = baseClassObj as DerivedClass;
nameof(EC.propertyX)

,但这不起作用:

nameof((baseClassObj as DerivedClass).propertyX)

具有:

的编译错误
Sub-expression cannot be used in an argument to nameof

顺便说一句,这也无效:

nameof(((baseClassObj)DerivedClass).propertyX)

有人可以解释这个铸造 名称问题吗?

名称是编译时间的东西,因此是静态的。要获得想要的东西,只需使用名称(derivedclass.propertyx):

class BaseClass
{
}
class DerivedClass : BaseClass
{
    public string PropertyX { get; set; }
}
static class UsePropertyName
{
    public static string GetPropertyName(BaseClass classInstance)
    {
        //Instance not actually used.
        return nameof(DerivedClass.PropertyX);
    }
}

名称基本上是作为预处理宏的工作。在编译时间之前,它将被参数的实际名称替换,从那里开始,它就像汇编中的"常数"字符串。

The argument expression identifies a code definition, but it is never evaluated.请参阅此处:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/nameof

据我所知,

nameof()基于nameof()中提供的表达式进行反射。因此,如果不是"简单的表达式",则引擎显然有问题"对"表达式"反编译"。

您可能有兴趣创建一些将baseClassObj as DerivedClass作为参数的扩展方法并返回nameof()的结果。

编辑:nameof()在编译时间内评估,这是主要原因:)

相关内容

  • 没有找到相关文章

最新更新