C#创建一个对象并更改值

时间:2013-01-24 16:15:17

标签: c#

我在创建对象和设置/获取值时遇到问题。这样做的目的是将数据从模型返回到控制器。

免责声明:我是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";

8 个答案:

答案 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;