类属性/字段可以在C#4.0中是匿名类型吗?

Die*_*ego 8 c# .net-4.0 c#-4.0

如:

public class MyClass {

  private static var MyProp = new {item1 = "a", item2 = "b"};

}
Run Code Online (Sandbox Code Playgroud)

注意:以上不编译也不工作(var不能在那里使用),它只是为了表明我的观点.

更新:为了澄清这个问题,我已经尝试过使用了

private static dynamic MyProp = new {item1 = "a", item2 = "b"};
Run Code Online (Sandbox Code Playgroud)

这是有效的,但由于动态类型,它不会生成智能感知.我知道匿名输入只是一个编译器技巧,所以我希望我可以通过声明一个结构化字段而不必事先声明一个类来使用这个技巧(主要是因为只有这个特定类型的一个实例)领域).我现在可以看到它不可能,但我不确定为什么会这样.如果编译器只是为匿名对象生成隐式类型,那么让编译器为字段生成这种隐式类型应该相当简单.

Jar*_*Par 11

听起来你可能会问一两个问题,所以我会尝试解决它们.

可以将类字段强类型化为匿名类型

不能.匿名类型名称不能用C#代码表示(因此是匿名的).静态输入它们的唯一方法是

  1. 通用类型推理
  2. 使用var关键字

这些都不适用于某种类型的领域.

可以使用匿名类型表达式初始化类字段吗?

是.该字段只需要声明为与匿名类型兼容的类型:object例如

public class MyClass { 
  private static object MyProp = new {item1 = "a", item2 = "b"}; 
} 
Run Code Online (Sandbox Code Playgroud)

  • 呃...所以答案不是"是",而是"不"? (3认同)

abh*_*hek 5

不,任何成员都应该是强类型的.

您可以选择动态类型,以便为您的成员提供在运行时进行评估的机会.

编辑:成员应显式输入.

  • var是强类型的.我认为你的意思是"明确打字". (2认同)

Ego*_*hin 5

在 C# 7 中,您终于可以这样做:

private (string Login, string Password) _credentials = (Login: "123", Password: "123");
Run Code Online (Sandbox Code Playgroud)

  • “ValueTuple”与匿名类完全不同。 (2认同)