Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#和匿名对象数组_C#_Asp.net_.net_Arrays_Anonymous Types - Fatal编程技术网

C#和匿名对象数组

C#和匿名对象数组,c#,asp.net,.net,arrays,anonymous-types,C#,Asp.net,.net,Arrays,Anonymous Types,这样的表达是什么意思 obj.DataSource = new[] { new {Text = "Silverlight", Count = 10, Link="/Tags/Silverlight" }, new {Text = "IIS 7", Count = 11, Link="http://iis.net" }, new {Text = "IE 8", Count = 12, Link="/Tags/IE8" }, new {Text = "C#", Cou

这样的表达是什么意思

obj.DataSource = new[]
{
    new {Text = "Silverlight", Count = 10, Link="/Tags/Silverlight" },
    new {Text = "IIS 7", Count = 11, Link="http://iis.net" },
    new {Text = "IE 8", Count = 12, Link="/Tags/IE8" },
    new {Text = "C#", Count = 13, Link="/Tags/C#" },
    new {Text = "Azure", Count = 13, Link="?Tag=Azure" }
};
特别是这些行:new{Text=“IIS 7”…}


如何手动创建这样的数组以适应此数据源。

这不是多维数组。这是使用创建的对象数组。

看起来像是匿名类型的数组

首先,让我们重新格式化一点:

obj.DataSource = new[]
{
    new {  Text = "Silverlight",  Count = 10,  Link = "/Tags/Silverlight"  },
    new {  Text = "IIS 7",        Count = 11,  Link = "http://iis.net"     }, 
    new {  Text = "IE 8",         Count = 12,  Link = "/Tags/IE8"          }, 
    new {  Text = "C#",           Count = 13,  Link = "/Tags/C#"           },
    new {  Text = "Azure",        Count = 13,  Link = "?Tag=Azure"         } 
};
这看起来不像是一个多维数组,而是一个由5个对象组成的数组。数组中的这些对象是使用
new{…}
创建和初始化的


关于您如何手动创建这样一个数组以适应数据源的问题:您似乎正是通过上述代码来实现的。

它正在创建一个新的对象数组,其中包含一组匿名对象

new {Text = "Azure", Count = 13, Link="?Tag=Azure" }
不是像php中的类似语法那样创建散列,而是一个具有属性Test、Count和Link集的真实对象

可以找到一个很好的匿名对象入门

您应该能够使用相同的语法创建这样的新结构,属性值不必是常量:

string text = "Azure";
int count = 13;
string link =  "?Tag=Azure";
new {Text = text, Count = count, Link=link }

要从我使用的函数返回这样的数组,请执行以下操作:

public object GetAnonymousArray()
{
    var tbl = new List<object>();
    while (___)
    {
        //fill array in cycle
        tbl.Add(new {Text = someString, Count = someInt, Link = link});
    }  
    return tbl;
}
public对象GetAnonymousArray()
{
var tbl=新列表();
而
{
//循环填充数组
添加(new{Text=someString,Count=somesint,Link=Link});
}  
返回tbl;
}

只需添加:匿名类型由编译器转换为真实对象。因此,代码将被更改为与此等效的内容(大大简化,只是为了表明编译器将创建一个实际的类):

然后,您的代码将更改为:

obj.DataSource = new AnonymousClass1[]
{
    new AnonymousClass1 {Text = "Silverlight", Count = 10, Link="/Tags/Silverlight" },
    new AnonymousClass1 {Text = "IIS 7", Count = 11, Link="http://iis.net" },
    new AnonymousClass1 {Text = "IE 8", Count = 12, Link="/Tags/IE8" },
    new AnonymousClass1 {Text = "C#", Count = 13, Link="/Tags/C#" },
    new AnonymousClass1 {Text = "Azure", Count = 13, Link="?Tag=Azure" }
};
在我的一个程序中,我有这样的代码(简化!):


这是有效的,因为它只是幕后的另一个类(我甚至得到了IntelliSense)。好处很明显,我只是避免了为这个对象创建类。在我的示例中,所有对象也需要看起来相同。(显然,对任何公共成员这样做都是一个坏主意,因为如果添加/删除一些匿名类,编译器可能会更改匿名类的名称)

像其他人一样更正答案+为了鼓励正确的格式,先生,您使用国王的格式。(好吧,除了
Lin
单词的class='s符号之间需要空格)。不过,我可以原谅这是一次意外。正确的格式极大地减少了错误并提高了易读性。到目前为止,我认为将问题标题从“C#多维数组”改为更合适的“匿名对象数组”是安全的引用文章:您可以通过组合隐式类型局部变量和隐式类型数组来创建匿名类型元素数组,如下例所示。var anonArray=new[]{new{name=“apple”,diam=4},new{name=“grape”,diam=1};
obj.DataSource = new AnonymousClass1[]
{
    new AnonymousClass1 {Text = "Silverlight", Count = 10, Link="/Tags/Silverlight" },
    new AnonymousClass1 {Text = "IIS 7", Count = 11, Link="http://iis.net" },
    new AnonymousClass1 {Text = "IE 8", Count = 12, Link="/Tags/IE8" },
    new AnonymousClass1 {Text = "C#", Count = 13, Link="/Tags/C#" },
    new AnonymousClass1 {Text = "Azure", Count = 13, Link="?Tag=Azure" }
};
var myObjects = new []{
    new { Id = Guid.NewGuid(), Title = "Some Title", Description = string.Empty },
    new { Id = Guid.NewGuid(), Title = "Another Title", Description = string.Empty },
    new { Id = Guid.NewGuid(), Title = "Number 3", Description = "Better than No2, but not much" }
}

foreach(var myObject in myObjects) {
    DoSomeThingWith(myObject.Title);
}