如何在c#中使用linq使用即时引用访问常量字段

本文关键字:引用 访问 常量 字段 linq | 更新日期: 2023-09-27 18:12:54

我有一个像下面这样的模型…

   public class Class1
   {
      public const string Example = "Example";
      public string Name { get; set:}
   }

还有一个命名为"Class2"的模型,其中"Class1"扮演虚拟角色,如下图所示…

   public class Class2
   {
      public int Id{get; set;}
      public virtual Class1 class1obj {get; set;}
      piblic int class1objId {get; set;}
   }

现在我有一个服务方法来获取模型"Class2"所持有的值,如下所述

   GetClass<T>();

现在,我计划使用下面的代码获取数据:

    var data = GetClass<Class2>(s => s.class1obj.Example == "Example1");

但是,当我输入上面的代码,我试图访问像s.class1obj常量。例如,它抛出错误和智能感知也只显示"名称"属性,并没有显示在"Class1"中声明的const示例?为什么,我不能访问常数场?

如何在c#中使用linq使用即时引用访问常量字段

不能通过实例访问常量。您需要使用类名。例如:

var ex = Class1.Example;

另一种选择是在你的类中添加一个access属性:

public Class1
{
    public const string Example = "Example";
    public string ExampleConst { get { return Example; } } 
}

常量字段是隐式静态的。这意味着它们不属于实例,而是属于类型。因此,要访问常量字段,您需要访问的不是类实例,而是类型对象,就像处理静态字段或方法一样。在您的情况下,这意味着您访问Class1.Example而不是class1obj.Example

Example是一个常量,可以将其视为类的属性,而不是对象实例的属性。

要访问它,你需要调用

var val = Class1.Example;

var data = GetClass<Class2>(s => Class1.Example == "Example1");

然而,这对我来说没有意义(它将始终返回true,因为它是一个常量)。我不完全确定你想在你的lamba中做什么,所以很难给出进一步的建议。