繁体   English   中英

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

[英]C# Create an Object and Change Value

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

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

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'。 我们在这个类中有一个属性。 然后,我们可以实例化该类并访问其中的属性。 实例化后,我们可以根据需要访问该属性,并为其重新分配新值。 希望有所帮助。

您需要在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);

但是,在创建它们之后,您无法添加或删除属性。

看起来你想要创建的是一个匿名类型 匿名类型很棒,因为它们提供了一种快速方便的方法来创建对象,而无需定义类型。

尝试这个:

var o = new { test = "cat" };

此时,您将能够访问匿名类型的属性,如下所示:

o.test = "dog";
MessageBox.Show(o.test);  //shows "dog"

如果您正在寻找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");

object没有这些属性或字段。 要访问这些字段,请使变量dynamic

dynamic o = new { test = "cat" };
Console.WriteLine(o.test );

哦,btw o["test"]不起作用.. o不是JavaScript或C#字典中的assoc数组..它是一个匿名对象。

通常,您创建一个类并初始化此类的实例; 但无论如何,以下工作。

请注意,即使未声明test ,它仍将构建; 但是你会在运行时遇到异常。

dynamic temp = ((dynamic)o).test;
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; }
}

如果您想要将字符串的任意映射到值,那么您应该使用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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM