newの直後の中括弧の中身が値のみのカンマ区切りで記述される、コレクション初期化子についてはこちらの記事を参照してください。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ObjectInitializer
{
public partial class FormSimpleObjectInitializer : Form
{
MyItem mi;
public FormSimpleObjectInitializer()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
mi = new MyItem { name="ぺんぎんクッキー", price=280, count=8 };
//こちらの記述でもOK
//mi = new MyItem() { name="ぺんぎんクッキー", price=280, count=8 };
}
private void button2_Click(object sender, EventArgs e)
{
textBox1.Text = string.Format("{0} : {1:g} / {2:d}",mi.name, mi.price, mi.count);
}
}
}
クラスのコードは下記になります。using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ObjectInitializer
{
public class MyItem
{
public string name;
public decimal price;
public int count;
}
}
mi = new MyItem { name="ぺんぎんクッキー", price=280, count=8 };
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ObjectInitializer
{
public partial class FormSimpleObjectInitializer : Form
{
MyItem mi;
public FormSimpleObjectInitializer()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
mi = new MyItem();
mi.name = "ぺんぎんクッキー";
mi.price = 280;
mi.count = 8;
}
private void button2_Click(object sender, EventArgs e)
{
textBox1.Text = string.Format("{0} : {1:g} / {2:d}",mi.name, mi.price, mi.count);
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ObjectInitializer
{
public partial class FormAnonymousObjectInitializer : Form
{
public FormAnonymousObjectInitializer()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var myItem = new { name = "らくだサブレ", price = 550, count = 8, weight = 0.25 };
textBox1.Text += "名称 : " + myItem.name+"\r\n";
textBox1.Text += "価格 : " + myItem.price.ToString() + "\r\n";
textBox1.Text += "在庫 : " + myItem.count.ToString() + "\r\n";
textBox1.Text += string.Format("重量 : {0:f2}\r\n", myItem.weight);
}
}
}
var myItem = new { name = "らくだサブレ", price = 550, count = 8, weight = 0.25 };
textBox1.Text += "名称 : " + myItem.name+"\r\n";
textBox1.Text += "価格 : " + myItem.price.ToString() + "\r\n";
textBox1.Text += "在庫 : " + myItem.count.ToString() + "\r\n";
textBox1.Text += string.Format("重量 : {0:f2}\r\n", myItem.weight);
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ObjectInitializer
{
public partial class FormAnonymousObjectInitializerLinq : Form
{
List<MyItem> MyList = new List<MyItem>();
public FormAnonymousObjectInitializerLinq()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MyList.Add(new MyItem() { name = "ぺんぎんクッキー", price = 380, count=4 });
MyList.Add(new MyItem() { name = "らくだサブレ", price = 260, count = 7 });
MyList.Add(new MyItem() { name = "あひるスフレ", price = 160, count = 3 });
MyList.Add(new MyItem() { name = "くじらキャンディ", price = 80, count = 12 });
MyList.Add(new MyItem() { name = "かるがもケーキ", price = 580, count = 2 });
}
private void button2_Click(object sender, EventArgs e)
{
var items = from i in MyList select new { i.name};
foreach (var t in items) {
textBox1.Text += string.Format("{0}\r\n", t.name);
}
}
}
}
new MyItem() { name = "ぺんぎんクッキー", price = 380, count=4 }
var items = from i in MyList select new { i.name};
items
にはMyListの要素であるMyItemオブジェクトの IEnumerable オブジェクトが格納されます。 var items = from i in MyList select i;
new { i.name}
となっているため、items
にMyItemオブジェクトが格納されるのではなく、name
メンバのみのオブジェクトが格納されます。LINQの結果でMyItemオブジェクトの不要なメンバ変数を含めず、必要なメンバ変数の値のみを取得するため、このような記述ができます。name
メンバのみを匿名オブジェクトで返す記述をしているため、name
以外のメンバは含まれません。 foreach (var t in items) {
textBox1.Text += string.Format("{0}\r\n", t.name);
}
foreach (var t in items) {
textBox1.Text += string.Format("{0}, {1:g}\r\n", t.name, t.price);
}
pp=i.count
と記述することで、元のオブジェクトのメンバ変数名を別の名称に変更できます。 private void button3_Click(object sender, EventArgs e)
{
var items = from i in MyList select new { i.name, pp = i.count};
foreach (var t in items) {
textBox1.Text += string.Format("{0} {1:d}\r\n", t.name, t.pp);
}
}