トップページ⇒tech
1001コメント293KB

ふらっとC#,C♯,C#(初心者用) Part23

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/01/11(金) 15:41:00
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

ふらっとC#,C♯,C#(初心者用) Part22
http://pc11.2ch.net/test/read.cgi/tech/1197802312/
0153デフォルトの名無しさん2008/01/15(火) 01:15:19
>>152
MSDN
0154デフォルトの名無しさん2008/01/15(火) 02:33:43
アンマネージドなリソースについてなんですが、やり直し等の機能でいつ解放
したらいいかわからないものが出てきた(ファイルとか)ので、ゴミ箱クラス作って
そこで一括管理しようと思ったのですが、対象となる変数の参照カウンタって
取得できないのでしょうか?
やっぱり自分で皮をかぶせるしかないですかね?
0155デフォルトの名無しさん2008/01/15(火) 02:40:28
何が言いたいのかよく分からんが、
LRのガーベジコレクタは参照カウント方式じゃないぞ
0156デフォルトの名無しさん2008/01/15(火) 02:40:59
s/LR/CLR/;
0157デフォルトの名無しさん2008/01/15(火) 02:48:42
>>155
ありゃ、そうなんですか… orz
今ざっと調べたところ、Finalize()を積んでおけばGCが勝手に実行
してくれるみたいなんですが、どうしてもDispose出来ないときは
それでいいんですかね?
0158デフォルトの名無しさん2008/01/15(火) 04:03:32
GC される前にランタイムが落ちるとか、結構ありそうだけどな。
ところで 「やり直し等の機能」 って何?
0159デフォルトの名無しさん2008/01/15(火) 06:24:53
>>157
アンマネージリソースを扱うなら、必ず適切なタイミングで
Disposeを呼ぶような設計しなきゃ駄目だよ。
細かい話が多いので割愛するけど、
ファイナライザに頼るスタイルは色々問題があるのヨ。

ぶっちゃけマネージドな世界では、例えばC++において参照カウンタ式スマートポインタで
自動化できてたリソース管理の一部は使えなくなると思っていた方が良いかと。
0160デフォルトの名無しさん2008/01/15(火) 06:30:02
VBの参考書で勉強しているのですが
Label1.Text = DirectCast(Me.PreviousPage.FindControl( _
"TextBox1"), TextBox).Text

をC#で書くにはどうしたらいいですか?
0161デフォルトの名無しさん2008/01/15(火) 07:42:54
自己解決しましたm(_ _)m
0162デフォルトの名無しさん2008/01/15(火) 08:30:22
>>158
ペイントなどに良くあるやり直し・元に戻す操作です。

>>159
やっぱり自前でDisposeしなきゃだめなんですね…
ちょっと基本設計見直してきます orz
0163デフォルトの名無しさん2008/01/15(火) 14:07:03
Form1とForm2を定義して
Form1内で
Form2 f2 = new Form2();
f2.ShowDialog();
でForm2を呼び出した後にf2内のbutton_Clickイベント処理内でf2の中のテキストボックスや、コンボボックスの値をForm1で取得したいのですが
どうしたらよいでしょうか?
0164デフォルトの名無しさん2008/01/15(火) 15:56:14
Form2がイベント公開してf2内のbutton_Clickイベントハンドラ内でfire
イベントデリゲート自分で定義してテキストやコンボボックスの値をEventArgsにつっこむか
またはプロパティで公開しとく
0165デフォルトの名無しさん2008/01/15(火) 16:31:40
fireってなんでしょうか?ぐぐってもよくわかんないです・・・
0166デフォルトの名無しさん2008/01/15(火) 16:39:14
イベントを起こす、ってことじゃね?

//Form2.cs

public event EventHandler HogeEvent;

private void button_Click( object sender, EventArgs e )
{
 if( this.HogeEvent != nul )
  this.HogeEvent( this, EventArgs.Empty ); // ← ココ
}

-------------------------------------------
//Form1.cs
...
Form2 f2 = new Form2();
f2.HogeEvent += new EventHandler( f2_HogeEvent );
...

private void f2_HogeEvent( object sender, EventArgs e )
{
 //ココが呼ばれる
}
0167デフォルトの名無しさん2008/01/15(火) 18:47:13
>>f2.HogeEvent += new EventHandler( f2_HogeEvent );
これは何をしているのでしょうか?
form1では
private void button_add_Click(object sender, EventArgs e)
{
Addition add = new Addition();
add.ShowDialog();
}
でform2(Addition)を呼び出し、手動で、form2内のテキストエリアやコンボボックスに入力してOKボタンを押す
そのとき、したのイベントに遷移して、このメソッド内で、form1内のデータグリッドを更新できないか?ということなんですが。
private void button_OK_Click(object sender, EventArgs e)
{


}

0168デフォルトの名無しさん2008/01/15(火) 18:52:38
(´・ω・`)しらんがな
0169デフォルトの名無しさん2008/01/15(火) 19:03:28
恥をしのんで質問いたします。
初めてコンソールアプリを作ろうとしているのですが、
エクスプローラーからコマンドプロンプトにディレクトリパスをD&Dで使わせようと思っています。
そのとき、長いフォルダ名を含む場合、絶対パスを表す文字列がダブルクォーテーションで囲まれてしまいます。
そのため、"入力文字列補正処理"を入れるようにしましたが、なんだかスッキリしません。
皆様どうやってやってますか?
以下にソースを書きます。宜しくお願いいたします。

01701692008/01/15(火) 19:04:04
static void Main(string[] args)
{
  string[] str; //検証用変数
  string Input, Output; //フォルダパス

  Console.WriteLine("入力フォルダパスを入力して下さい");

  //入力文字列補正
  str = Console.ReadLine().Split(new char[] {'\"'});
  if (str.Length == 3) { Input = str[1]; }
  else { Input = str[0]; }

  Console.WriteLine("出力フォルダパスを入力して下さい");

  //入力文字列補正
  str = Console.ReadLine().Split(new char[] { '\"' });
  if (str.Length == 3) { Output = str[1]; }
  else { Output = str[0]; }

  if (Directory.Exists(Input) & Directory.Exists(Output))
  {
   Console.WriteLine("valid");
   Console.ReadLine();
 }
  else
  {
   Console.WriteLine("invalid");
   Console.ReadLine();
  }
}
0171デフォルトの名無しさん2008/01/15(火) 19:07:37
>>167
form2でセットするんじゃなくて、form2はセットさせたい項目をpublicなプロパティで返すようにする
form1でDialogResultをチェックしてform2のプロパティからセットするのが正解
0172デフォルトの名無しさん2008/01/15(火) 19:07:40
Trim(char[])
0173デフォルトの名無しさん2008/01/15(火) 19:18:45
>>167
個人で作ってるだけでプロパティ作るのが面倒くさかったら、
form2の該当の入力フィールド(textBoxとか)のModifiersをPublicにするのも手だけど
0174デフォルトの名無しさん2008/01/15(火) 19:22:07
>>171
丁寧にありがとうございます。
>>セットさせたい項目をpublicなプロパティで返すようにする
というのがいまいちわかりません。
ソース載せます。
//form1(Main)
public partial class Main : Form
{
public Main(){
InitializeComponent();
}

private void button_add_Click(object sender, EventArgs e) {
Addition add = new Addition();
add.ShowDialog();
}
}

//form2(Additon)
public partial class Addition : Form
{
public Addition() {
InitializeComponent();
}

private void button_OK_Click(object sender, EventArgs e) {
//MessageBox.Show(textBox_name.Text+"\n"+ comboBox1.Text+"\n"+textBox1.Text);
}
}
0175デフォルトの名無しさん2008/01/15(火) 19:24:50
public partial class Addition : Form
{
 public string 結果 { return textBox_name.Text+"\n"+ comboBox1.Text+"\n"+textBox1.Text; }
}
0176デフォルトの名無しさん2008/01/15(火) 19:24:57
>>173
publicにしたら、Form1.csの補完機能からform2のコントロールが見えました!
ありがとうございます!
01771752008/01/15(火) 19:25:16
ミス
 public string 結果 { get { return textBox_name.Text+"\n"+ comboBox1.Text+"\n"+textBox1.Text; } }
0178デフォルトの名無しさん2008/01/15(火) 19:37:02
はじめまして。

まことに簡単な質問で恐縮なのですが、DataGridViewのculomnsのプロパティで
オートインクリメントをしたい列があるのですが、どうすればよいでしょうか?

よろしくお願いいたします。
0179デフォルトの名無しさん2008/01/15(火) 20:33:34
>>169
な、何を言ってるのかね?
0180デフォルトの名無しさん2008/01/15(火) 20:53:51
>>169
ただファイルを開くとかくらいなら、
ダブルクォーテーションがあっても問題なかった気がするけど。
0181デフォルトの名無しさん2008/01/16(水) 10:43:24
>>169
dos窓でドロップやったことないのか?
スペース含むパス取り込むためにデフォルトで""囲みになるのが普通だよー
0182デフォルトの名無しさん2008/01/16(水) 11:16:56
問題あるならTrimでもすりゃいいんでは?
0183デフォルトの名無しさん2008/01/16(水) 11:40:31
C#でExcelを操作しようと調べているんですが、断片的な
情報しか見つける事ができませんでした。

何か参考になる本やサイトなど知っていたら紹介して貰えませんか?
0184デフォルトの名無しさん2008/01/16(水) 12:33:03
COM Excel C# でググるとか
01851692008/01/16(水) 13:21:32
>>180

そうだと思ったんですが、パスを変数に格納した後にフォルダの存在確認を>>170の下の方で
行っているんですが、""つきのパスだと存在しないよって言われちゃうんですよ。

>>182
調べてみます
0186デフォルトの名無しさん2008/01/16(水) 13:51:48
つか、D&Dできるの始めて知ったぜ。いつもいちいちコピペしてた。
0187デフォルトの名無しさん2008/01/16(水) 14:00:08
Vistaでできないな、、、XPをリモートデスクトップで出してみたらこっちではD&Dできるが・・・
0188デフォルトの名無しさん2008/01/16(水) 14:38:39
VS2005でC#の勉強をしています。
質問なのですが、テキストファイルに
1 200
2 356
3 1250
4 870
5 692
といったような行列があり、それをC#のプログラムで読み込み
1000以上の値を持つものだけピックアップすることはできるでしょうか。
ピックアップした後に計算もしたいので、変数にその値を代入したいのです。
よろしくお願いします。
0189デフォルトの名無しさん2008/01/16(水) 15:00:03
StreamReaderとかで開いて
ReadLineして
パースすればいい
0190デフォルトの名無しさん2008/01/16(水) 15:01:21
var hoge =
 from line in File.ReadAllLines(@"...")
 from str in line.Split(' ')
 let value = Int32.Parse(str)
 where value >= 1000
 select value;

0191デフォルトの名無しさん2008/01/16(水) 15:05:51
VS2005や言うてるやろスカタン
01921692008/01/16(水) 15:46:16
>>188

StreamReader sr = new StreamReader(filepath);
List<int[]> list = new List<int[]>();
do
{
  string str = sr.ReadLine();
  if (str != "")
  {
   string[] ary = str.Split(new char[] { ' ' });
   int n1 = int.Parse(ary[0]);
   int n2 = int.Parse(ary[1]);
   if (n2 > 999)
   {
    list.Add(new int[] { n1, n2 });
    }
  }
}
while (sr.Peek() != -1);
01931692008/01/16(水) 15:51:20
どうやら手動で削除するほかなさそうですね。
splitを使って面倒なことをしてましたが、
Trim(もしくはReplaceでも可)を使って少しコードがすっきりしました。
ありがとうございました。



Console.WriteLine("入力フォルダパスを入力して下さい");

Input = Console.ReadLine().Trim(new char[] { '\"' });

Console.WriteLine("出力フォルダパスを入力して下さい");

Output = Console.ReadLine().Trim(new char[] { '\"' });

if (Directory.Exists(Input) & Directory.Exists(Output))
{
  Console.WriteLine("valid");
  Console.ReadLine();
}
else
{
  Console.WriteLine("入力したフォルダパスが不正です");
  Console.ReadLine();
}

0194デフォルトの名無しさん2008/01/16(水) 21:00:02
オマイラそれ絶対なんか間違ってるだろwww
0195デフォルトの名無しさん2008/01/16(水) 21:20:34
すみません、教えてください。

VS2005 .netでプログラムしていますが、HOMEPATHの取得法はあるのでしょうか?

もしあるならば方法をご教授ください。

よろしくお願いします
0196デフォルトの名無しさん2008/01/16(水) 21:23:02
994 名前:デフォルトの名無しさん[sage] 投稿日:2008/01/11(金) 12:14:20
Environment.GetEnvironmentVariable( "HOMEPATH" );
0197デフォルトの名無しさん2008/01/16(水) 21:27:22
\r\n と \n の差がわからないんだが
どっちも改行するわけだが動違うの?
0198デフォルトの名無しさん2008/01/16(水) 21:31:50
>>197
サイズが違う。
0199デフォルトの名無しさん2008/01/16(水) 21:38:14
おおまかにはOSによって改行コードが違う。
Unix:\n
Windows:\r\n
Mac:\r

ってか基本だと思うけど。
0200デフォルトの名無しさん2008/01/16(水) 21:40:24
>>199
トンクス
Cとかだと\nが改行だから\r\nって何かと思ってたんだが
Windowsなら\r\nでいいってことでつね
0201デフォルトの名無しさん2008/01/16(水) 21:46:35
>>200
Cは、テキストモードだと、\nは\r\nに変換される。(winでは)
0202デフォルトの名無しさん2008/01/16(水) 21:52:10
>>196

ありがとうございました。無事解決です
0203デフォルトの名無しさん2008/01/16(水) 22:09:14
>>200
どうでもいい話ではあるんだが意味的に言うとWinがたぶん正しい
なのでhttpとかも\r\n。この辺はCRとLFを調べてみれ
0204デフォルトの名無しさん2008/01/16(水) 22:28:13
むかしタイプライターというものがあってのう
0205デフォルトの名無しさん2008/01/16(水) 22:57:06
LFだけってのはおかしいと思う。
0206デフォルトの名無しさん2008/01/16(水) 23:00:21
それ言ったらCRだけなのもおかしい
0207デフォルトの名無しさん2008/01/16(水) 23:16:31
CRってキャリッジリターンなのは聞いたことあるけど、LFってなんて言うの?
ラインフィニッシュ?
0208デフォルトの名無しさん2008/01/16(水) 23:20:38
ラインフィード
0209デフォルトの名無しさん2008/01/16(水) 23:21:27
CR=キャリッジリターン=キャリッジ(紙を左右に動かす装置)を初期位置に戻すこと。
LF=ラインフィード=紙送り。
0210デフォルトの名無しさん2008/01/17(木) 00:53:22
C#相談室から誘導されてきました。
たとえば、こういうコードがあったとします。

if (Result == null) {
transaction.Rollback();
MessageBox.Show("エラー0です。");
return false;
}
if ((int)Result == 1) {
transaction.Rollback();
MessageBox.Show("エラー1です。");
return false;
}
if ((int)Result == 2) {
transaction.Rollback();
MessageBox.Show("エラー2です。");
return false;
}
transaction.Commit();
return true;

これをスッキリ表記するのに何かいい手段はないですかねぇ…。
throwで例外起こしてtry〜catchってのもスッキリしなくて…
0211デフォルトの名無しさん2008/01/17(木) 01:08:54
C#でLispみたいなカッコイイプログラミングするにはどうすればいいの?
0212デフォルトの名無しさん2008/01/17(木) 01:13:40
F#をダウンロードします
0213デフォルトの名無しさん2008/01/17(木) 01:20:46
そして卵を御飯にかけます
0214デフォルトの名無しさん2008/01/17(木) 01:27:18
>>210
result = (Result == null) ? 0 : (int)Result;

switch(result){
case 0:
case 1:
case 2:
transaction.Rollback();
string temp = "エラー" + result + "です。";
MessageBox.Show(temp);
return false;
break;

default:
transaction.Commit();
return true;
break;
}
0215デフォルトの名無しさん2008/01/17(木) 01:39:34
xmlファイルをphpのsimple xmlみたいに簡単に扱える方法はないのでしょうか?
0216デフォルトの名無しさん2008/01/17(木) 09:07:05
C#のswitchのcaseは絶対に下に降りられないと思ってたが、何も書かなければ並べられるのか。
しかし不必要なbreakを強要されるのが面倒くさいな。
Cの文法に慣れてる人がバグを作らないようにってことなのかな。
0217デフォルトの名無しさん2008/01/17(木) 09:10:59
returnの下のbreakいらんだろ
0218デフォルトの名無しさん2008/01/17(木) 09:22:09
いらん以前に到達できないコードな警告出たりしないかそれ確か
0219デフォルトの名無しさん2008/01/17(木) 13:16:16
構造体のマーシャリングについて質問いいっすか?
自分よく分かってないんですが

typedef struct tagDESKBANDINFO {
 DWORD dwMask;
 POINTL ptMinSize;
 POINTL ptMaxSize;
 POINTL ptIntegral;
 POINTL ptActual;
 WCHAR wszTitle[256];
 DWORD dwModeFlags;
 COLORREF crBkgnd;
} DESKBANDINFO;

の WCHAR wszTitle[256];って
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]
にした上で

[MarshalAs(UnmanagedType.ByValTStr, SizeConst=256)]
string wszTitle;

じゃないんですか?
http://www.pinvoke.net/default.aspx/Structures/DESKBANDINFO.html
とかだと255になってるんですがどっちが正しいんでしょう?
0220デフォルトの名無しさん2008/01/17(木) 13:16:55
試してみたがbreakいらんな
0221デフォルトの名無しさん2008/01/17(木) 13:20:25
null終端とやらの関係かなとか思ったんですが
http://msdn2.microsoft.com/ja-jp/library/795sy883(VS.80).aspx
文字列のマーシャリングだと

TCHAR szCSDVersion[ 128 ];
↓
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=128 )]
String versionString;

になってるしワケワカリマセン
0222デフォルトの名無しさん2008/01/17(木) 13:20:51
>>219
256であってる
02232192008/01/17(木) 13:25:09
>>222
ありがとうございます。

まじすか。
PInvoke.netのまま使ってると2バイトずつ上にずれてるってことですか?
02242192008/01/17(木) 13:30:11
ありゃMarshal.SizeOfを見たらどっちも同じ
さらにワケワカメ

アラインとかPackとかのせいですか?
ということは実害なし?
0225デフォルトの名無しさん2008/01/17(木) 18:06:12
GTKについてわからないところがあるのですが、詳しい方いらっしゃいますか?
0226デフォルトの名無しさん2008/01/17(木) 18:08:57
>>225
C#でGTKといったらMono?
Monoスレに行かないといないかもしれない。
0227デフォルトの名無しさん2008/01/17(木) 18:11:31
そうですか…行ってみます。
すみません、ありがとうございました。
0228デフォルトの名無しさん2008/01/18(金) 01:31:53
VC#2008関連の書籍って出ないの?
02292102008/01/18(金) 02:17:47
>214
ありがとうございます。
これで試してみます。
0230デフォルトの名無しさん2008/01/18(金) 03:32:28
C#でxmlファイルをphpのsimple xmlみたいに簡単に扱える方法はないのでしょうか?
0231デフォルトの名無しさん2008/01/18(金) 03:46:58
visual studio 2005を使ってます。

pictureboxに表示する画像のリソースを指定するときは

this***.Image = Properties.Resources.abc;

のようにしますが(というかVSが勝手にやってくれますが)
これを文字列型の変数を使ってやることはできないでしょうか?

string TMP;
TMP = "abc";
として5行目と同じように指定したいのです。
0232デフォルトの名無しさん2008/01/18(金) 06:06:54
リフレクション使えばできると思うが、やるほどの価値はないと思う。
0233デフォルトの名無しさん2008/01/18(金) 07:02:54
ResourceManager.GetObject使えばできるけど厳密な型指定できないよ
0234デフォルトの名無しさん2008/01/18(金) 07:27:36
何をしたいのかを書けば、もっといい解決法があるかもよ
0235デフォルトの名無しさん2008/01/18(金) 09:13:14
>>232
>>234
リソース名が連続した英数字なので、for文で数十の文字列の配列を作ったんですが、それをリソース名の指定に使う方法が分からなくて・・・
手動でやるよりはるかに効率的だと思うので、できればさわりだけでも簡単に教えてもらえればと

>>233
では、結局出来ないということになるんでしょうか・・・?
0236デフォルトの名無しさん2008/01/18(金) 09:21:16
Properties.Resources.abc;の実装がどうなってるかみなよ。
0237デフォルトの名無しさん2008/01/18(金) 10:18:33
>>230
XLinqでも使ってみれば
02381882008/01/18(金) 11:19:39
遅くなりましたが無事解決しました!
ありがとうございました。
0239デフォルトの名無しさん2008/01/18(金) 15:01:23
byte[] b1 = new byte[] {1,2,3,4};
byte[] b2 = new byte[] {1,2,3,4};

があったとして、2つの配列の内容が全て等しいか簡単に調べる方法ってないですか?

b1 == b2;
も
b1.Equals(b2);
もfalseになります(´・ω・)

やっぱいちいちforeachで回さないとダメですか?
0240デフォルトの名無しさん2008/01/18(金) 15:04:53
うむ
Array.Equals は object.Equals と変わらんからな
0241デフォルトの名無しさん2008/01/18(金) 15:06:27
ぶ、C# 配列 比較 で検索したらすぐ見つかりました。
出来ないみたいですねorz

お騒がせしました。
0242デフォルトの名無しさん2008/01/18(金) 15:09:45
継承クラスで共通のメソッド実行時
親クラスで共通の処理をさせたいのですがどうすればいいでしょうか
うまく説明できないんですがポリモーフィズム的なメソッドの共通処理を
継承クラスでは意識せずに親で処理させたいのですが・・・
0243デフォルトの名無しさん2008/01/18(金) 15:24:50
//親
virtual void Hoge()
{
 ...
}

//子
override void Hoge()
{
 ...
 base.Hoge();
}
じゃあかんのん?
0244デフォルトの名無しさん2008/01/18(金) 15:27:51
>>243
やっぱりそうなりますかね
base.Hoge()の処理は必ずして欲しいのに
base.Hoge();を付け忘れちゃったりするものですから
0245デフォルトの名無しさん2008/01/18(金) 16:21:12
Hoge は virtual じゃなくして、HogeOverridable を virtual にして
Hoge のなかで HogeOverridable を呼ぶ
ただし派生クラスで基底クラスの処理の呼び出す位置を変更できないデメリットもある
02462312008/01/18(金) 19:49:57
>>231ですが
http://www.atmarkit.co.jp/fdotnet/dotnettips/220resources3/resources3.html
を参考に

Assembly thisExe = Assembly.GetExecutingAssembly();

ResourceManager TMPres = new ResourceManager(
"***.Properties.Resources", thisExe);
xxx = (Image)TMPres.GetObject("abc");

とやったらできました。
0247デフォルトの名無しさん2008/01/18(金) 20:10:42
Image img = (Image)Properties.Resources.ResourceManager.GetObject( "hoge" );
0248デフォルトの名無しさん2008/01/18(金) 23:19:52
VS2008を使っていますが、
FormのFormClosingイベントを捕らえて
フォームを閉じることを中止するにはどうすればいいのでしょうか?

以下のように書いてもだめでした。
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
  DialogResult result = MessageBox.Show("変更を保存しますか?", "確認",
  MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
 if (result == DialogResult.Yes)
 {
  this.menuSaveProject_Click(sender, e);
 }
 else if (result == DialogResult.Cancel)
 {
  return; // ←これ
 }
}
よろしくお願いいたします。
0249デフォルトの名無しさん2008/01/18(金) 23:26:03
引数調べれ
0250デフォルトの名無しさん2008/01/18(金) 23:28:22
e.Cansel = true;
とやればいいようですね(´・ω・`)

今までeなんて無視してました
ありがとうございました
0251デフォルトの名無しさん2008/01/18(金) 23:29:03
ていうかイベントの解説に書いてるよな
0252デフォルトの名無しさん2008/01/19(土) 00:16:31
IPAddress[] addrs;
があったとして、
この中から特定のIPの項目だけ削除ってどうすればいいんでしょうか。

InteliSenseで見てると
addrs.Except();
とかそれっぽいのはあるんですが、いまいち使い方がわかりません・・・
■ このスレッドは過去ログ倉庫に格納されています