我在创建对象和设置/获取值时遇到问题。这样做的目的是将数据从模型返回到控制器。
免责声明:我是C#的新手
有人能告诉我正确的方法吗?
我尝试过这些方法,但我不断收到错误:
object o = new { test = "cat" };
o.test = "dog";
Object o = new { test = "cat" };
o.test = "dog";
object o = new Object();
o.test = "dog";
// I also tried
object o = new Object();
o["test"] = "dog";
答案 0 :(得分:5)
JREAM,你对C#对象的基本前提和理解可能有点瑕疵,这是导致你混淆的原因。
“在C#的统一类型系统中,所有类型,预定义和用户定义的引用类型和值类型都直接或间接地从Object继承。您可以将任何类型的值分配给object类型的变量。” http://msdn.microsoft.com/en-us/library/9kkx3h3c%28v=vs.110%29.aspx
话虽如此,但最好尽可能使用定义的类型而不是对象。在您的情况下,您的对象应该是类,然后依次创建可以使用的引用类型。
public class O
{
public string test { get; set; }
}
var newO = new O() { test = "cat" };
newO = "dog";
在这里,我们创建了一个新类'O'。我们在这个类中有一个属性。然后,我们可以实例化该类并访问其中的属性。实例化后,我们可以根据需要访问该属性,并为其重新分配新值。希望有所帮助。
答案 1 :(得分:3)
您需要在C#中实例化一个类。在C#中无法创建出蓝色的对象(如在JavaScript中)。
例如,该类看起来像这样:
public class MyClass {
public string test { get; set; }
}
MyClass o = new MyClass { test = "cat" };
更新:从.NET 3.5开始,您实际上可以创建如下对象:
var o = new { test = "cat" };
Console.WriteLine(o.test);
但是,在创建它们之后,您无法添加或删除属性。
答案 2 :(得分:2)
您尝试创建的内容似乎是anonymous type。匿名类型很棒,因为它们提供了一种快速方便的方法来创建对象,而无需定义类型。
试试这个:
var o = new { test = "cat" };
此时,您将能够访问匿名类型的属性,如下所示:
o.test = "dog";
MessageBox.Show(o.test); //shows "dog"
答案 3 :(得分:2)
如果您正在寻找Key,Value pair
,可以轻松使用Dictionary
;
using System.Collections.Generic;
Dictionary<string, string> kv = new Dictionary<string, string>() {
{"Key1","Value1"}, {"Key2","Value2"}, {"Key3","Value3"}
};
并检索为;
string Val1 = kv["Key1"];
并将键值添加为;
kv.Add("Key4","Value4");
答案 4 :(得分:1)
object
没有这些属性或字段。要访问这些字段,请创建变量dynamic
。
dynamic o = new { test = "cat" };
Console.WriteLine(o.test );
哦,顺便说一句o["test"]
无效.. o
不是JavaScript或C#字典中的关联数组..它是一个匿名对象。
答案 5 :(得分:1)
通常,您创建一个类并初始化此类的实例;但无论如何,以下工作。
请注意,即使未声明test
,它仍会构建;但是你会在运行时遇到异常。
dynamic temp = ((dynamic)o).test;
答案 6 :(得分:1)
new { test = "cat" };
您正在尝试使用test
属性创建一个匿名对象,这似乎不是您想要的。如果要初始化自定义属性,请使用下一个语法
var customer = new Customer {Name = "Ilya"};
将由编译器翻译成
var customer = new Customer();
customer.Name = "Ilya";
请注意,您应该定义自定义类,如
public class Customer
{
public string Name { get; set; }
}
答案 7 :(得分:1)
如果您想要将字符串的任意映射到值,那么您应该使用Dictionary
。
Dictionary<string, string> lookup = new Dictionary<string, string>();
lookup.Add("test", "dog");
//add other pairs.
string value = lookup["test"]; //value will be "dog"
代码new { test = "cat" };
创建一个具有一个属性(test
)和设置值的新匿名类型的实例。 C#中的匿名类型是不可变的,因此一旦创建该属性,您将无法将该属性设置为其他任何属性。
您无法正确访问它的原因是您将其存储在object
中。由于object
没有任何属性,编译器“失去”对象具有该属性的知识。您可以使用var
来确保变量属于正确的类型(这是一种匿名类型),这将允许您使用该属性:
var obj = new { test = "cat" };
string value = obj.test;