如何使用C#中的linq使用即时引用访问常量字段?

如何使用C#中的linq使用即时引用访问常量字段?,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有一个模型如下 public class Class1 { public const string Example = "Example"; public string Name { get; set:} } public class Class2 { public int Id{get; set;} public virtual Class1 class1obj {get; set;} pibli

我有一个模型如下

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

      public int Id{get; set;}

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

   }
还有一个名为“Class2”的模型,其中“Class1”充当虚拟角色,如下所示

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

      public int Id{get; set;}

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

   }
现在我有一个服务方法来获取下面提到的模型“Class2”所持有的值

   GetClass<T>();
GetClass();
现在,我计划使用以下代码获取数据:

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

但是,当我键入上面的代码并尝试访问常量(如s.classaobj.Example)时,它会抛出错误,intellisense也只显示“Name”属性,而不显示在“Class1”中声明的const示例?为什么,我不能访问常量字段?我正在学习过程中,请任何人帮我解决这个问题。

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

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

要访问它,你可以打电话

var val = Class1.Example;
诸如此类

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

然而,这对我来说没有意义(它总是返回true,因为它是一个常量)。我不完全确定您在lamba中要做什么,因此很难进一步建议…

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

var ex = Class1.Example;
另一种方法是向类中添加access属性:

public Class1
{
    public const string Example = "Example";

    public string ExampleConst { get { return Example; } } 
}

显然,您不能通过实例访问常量。它需要通过类名访问