[英]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.