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

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

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

なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっとC#,C♯,C#(初心者用) Part66
http://hibari.2ch.net/test/read.cgi/tech/1290854247/

■関連スレ
C#, C♯, C#相談室 Part63
http://hibari.2ch.net/test/read.cgi/tech/1289733048/
VB.NET質問スレ(Part35)
http://hibari.2ch.net/test/read.cgi/tech/1284423653/
くだすれC++/CLI(初心者用)part2
http://pc12.2ch.net/test/read.cgi/tech/1268613679/

■備考
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
http://ideone.com/
コードを貼り付けてRun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます。

直接貼る場合は下記サイトなどを利用してhtmlエンコードした方が
インデントも残って見やすいです
http://kawama.jp/php/encode_html.php
0002デフォルトの名無しさん2010/12/16(木) 18:27:19
1>>乙
0003デフォルトの名無しさん2010/12/16(木) 19:10:57

「乙」とは十干(じっかん、甲乙丙丁戊己庚辛壬癸)の第2番目。「きのと」とも読む。五行は木、陰陽は陰。草花を象徴し、協調・社交・和合を意味する。

または甲で始まる順位の第2位。「乙種」「甲乙つけがたい」

乙>>1
0004デフォルトの名無しさん2010/12/17(金) 10:37:49
>1お疲れさまです^^

早速質問なんですが、xmlデータの取込の際にタグで
<ns0:root xmlns:ns0="http:〜">のタグって名前空間とまで分かったのですが

public T Deserialize<T>(string fileName, string encode = "Shift_JIS")
{
var serializer = new XmlSerializer(typeof(T));
using (var tr = new StreamReader(fileName, Encoding.GetEncoding(encode)))
{
return (T)serializer.Deserialize(tr);
}
}
の形で取り込む時に<T>のクラス指定での名前空間の指定(?)の方法がわかりません;w;
どなたか分かる方いらっしゃいますか?

説明下手ですいません。。。
0005デフォルトの名無しさん2010/12/17(金) 10:44:13
DOMを使うべき
000642010/12/17(金) 10:55:26
業者から来る形がいままで名前空間の無いXMLが来ていたのですが
新規の業者に名前空間が付いていることと、既存の取込方法をしようして
取り込みたいのでどうぞよろしくおねがいいたします。
0007デフォルトの名無しさん2010/12/17(金) 11:21:39
DOMで好きなように書き換えてからXmlSerializerに食わせればいいじゃん
0008デフォルトの名無しさん2010/12/17(金) 11:26:22
xmlは詳しくないけどxmlの中に名前空間を持ったノード?が存在できて
そのクラスが独自に存在するならそういうデータを作ってそのクラスの型を調べればいいんじゃね?
0009デフォルトの名無しさん2010/12/17(金) 11:30:19
だいたいDOMを使わなかった元の設計者が糞
0010デフォルトの名無しさん2010/12/17(金) 11:33:46
うーむ、、、独自にXPathDocument使ってしまおうかな@w@

それなら簡単だし。。。
0011デフォルトの名無しさん2010/12/17(金) 11:35:45
>>10
昔のようにメモリかつかつな時代でもないんだし
従来のロジック+新しいロジックの併用運用すればいいじゃん
新しい方でもいけるならそっちに切り替えるとかすればいいんだし
0012デフォルトの名無しさん2010/12/17(金) 11:51:31
そうですね、、、そうします@w@んでこっそりいままのやつも変更・・しようかなぁ
0013デフォルトの名無しさん2010/12/17(金) 14:33:27
スキーマがあるならxsd.exeでクラス自動生成させて
XmlSerializerに食わせれば一発だよ
0014デフォルトの名無しさん2010/12/17(金) 15:28:24
streamreader で何行か読んで、
今のストリームの位置を変数かなんかに
保存してbinaryreader でそこから読んでいきたいんですが
可能ですか?素直にbinaryreader で一文字ずつ読んで
改行文字を追うべきでしょうか
0015デフォルトの名無しさん2010/12/17(金) 15:30:25
そんな読み方して何やるの?
0016デフォルトの名無しさん2010/12/17(金) 15:48:05
途中までテキストとして扱えるファイルを使うのに
便利そうなので・・・
0017デフォルトの名無しさん2010/12/17(金) 16:11:07
>>16
StreamReaderはある程度の量をバッファーに読み込みながら処理しているんだけど、
そのバッファーをどこまで使ったかはプライベートになっているので外部からではわからない。
文字列の長さから位置を割り出そうとしても、改行文字が\nか\r\nかわからないし、
エンコーディングの関係でずれる可能性があるので難しい。
リフレクション使えばなんとかなるかもしれないけど、
素直にbinaryreaderで一文字ずつ読んで改行文字を追っていったほうが楽そう。
0018デフォルトの名無しさん2010/12/17(金) 16:14:14
>>17
というかテキストとバイナリの境目って何で判断するのって話だな
テキストデータってのはバイナリコードをあるルールに従って扱ってるだけの話だし

作ってる人間はここまでがテキストここからはバイナリと思ってても
コードだけみたんじゃあわからないぞ
0019デフォルトの名無しさん2010/12/17(金) 16:15:33
あー、ちょっと訂正
streamreader.CurrentEncoding.GetByteCount使えば文字列の長さは割り出せるね
0020デフォルトの名無しさん2010/12/17(金) 16:28:38
割り出せないよ
だいたいそれ使うならオンメモリだからストリーム戻す必要なんかない
最初から別のbyte配列に読んでしまえばいいだけのこと
0021デフォルトの名無しさん2010/12/17(金) 16:29:37
>>18
テキストとしてみたとき
4行だけ読めば良い、とか特定の文字の出現ででテキストとして解釈できる
範囲が確定できる場合を想定してるんです
0022デフォルトの名無しさん2010/12/17(金) 16:53:12
ちょっと大げさかもしれんが
class BinaryReaderEx : BinaryReader {
  public BinaryReaderEx(Stream input) : base(input) {
  }
  public string ReadLine() {
    StringBuilder sb = new StringBuilder();
    char c;
    while ((c = this.ReadChar()) != '\n') {
      if (c == '\r') continue;
        sb.Append(c);
      }
      return sb.ToString();
      }
    }
  }
}
0023デフォルトの名無しさん2010/12/17(金) 18:38:53
C#の文法やら仕様について詳しい他言語経験者向けの書籍でオススメなの有りますか?
0024デフォルトの名無しさん2010/12/17(金) 18:44:15
>>23
どの言語から来たかしらないがクラスを覚える必要があるけど
基本はそんなに難しくないと思うのでここでも一読を
http://ufcpp.net/study/csharp/index.html

まあどの言語から来るかにもよるんですけどね・・・・
0025デフォルトの名無しさん2010/12/17(金) 18:45:44
>クラスを覚える必要があるけど
MSが用意したクラスを覚える必要があるけど
0026デフォルトの名無しさん2010/12/17(金) 18:50:11
>>23
標準講座C#
978-4798114736

なんかどう?
0027デフォルトの名無しさん2010/12/17(金) 18:56:31
Cを中心にC++をちょっとかじった程度です

>>24>>26
なかなか分かりやすそうでよさげですね
そこそこ良いお値段するけど中身も良さそうなのでちょっと書店で目を通してみます
0028142010/12/17(金) 21:16:11
GetByteCount と BaseStream.Seek

で出来ました。一箇所妙な出力が残ってますが

>>19
どうも
0029デフォルトの名無しさん2010/12/17(金) 22:59:02
それ、出来たっていうのだろうか
0030デフォルトの名無しさん2010/12/17(金) 23:09:28
>>29
明らかに消せそうだったので
もう直せましたし
0031デフォルトの名無しさん2010/12/17(金) 23:17:04
文字列として読み取ったブロックの元の長さと、GetByteCount(読み取られた文字列)が等しいことは
保障されるの?
0032デフォルトの名無しさん2010/12/18(土) 00:38:15
助けて下さい。
GoogleのAPIでGoogleカレンダーをc#で表示するにはどうしたらいいんでしょうか。SDKはDL済み、環境はVS2008です
いろいろいじってみたのですが全くわかりませんでした。
0033デフォルトの名無しさん2010/12/18(土) 06:45:52
こういうのはアリ?

Bitmap bmp = (略
pictureBox1.Image = bmp;


それともこうしなきゃだめ?

Bitmap bmp = (略
Image old = pictureBox1.Image;
pictureBox1.Image = bmp;
old.Dispose();
0034デフォルトの名無しさん2010/12/18(土) 08:21:01
>>32
web系のAPIってぶっちゃけると単なるURLでしょ


>>33
なんのためのGCかと
0035デフォルトの名無しさん2010/12/18(土) 09:02:27
>>33
なんか懐かしいw
DCにブラシやペンを設定〜
0036デフォルトの名無しさん2010/12/18(土) 09:12:57
>>35
c#でもブラシやペン使うときはDisposeするよ
http://dobon.net/vb/dotnet/graphics/fillrectangel.html
Dispose書き忘れが嫌ならusingで囲っちゃえばいいだけだし

PictureBoxに渡してあったImageは新しいImageを渡すことで
切り離されていずれGCが開放するだろうけど
0037デフォルトの名無しさん2010/12/18(土) 10:33:36
>>33
同じ処理したことあるけど、考えたことなかった。
確かに Dispose() したくなるね。
pictureBox.Image の set 時に、 勝手にDispose()してくれるとうれしいけど、どうだろう。

以下のサンプルではDispose()してないから、不要かな。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.picturebox.image%28v=VS.80%29.aspx
0038デフォルトの名無しさん2010/12/18(土) 10:46:49
>>37
勝手にDisposeされたら怖いわ
二つのImageを状況に応じて切り替えとかできねぇじゃん

たまに替えるだけなら基本はGCまかせでOK
ビューアとかならちゃんと以前のはDispose
0039332010/12/18(土) 15:03:24
やっぱそうかーありがとう
それなりにぱかぱかBitmap生成して切り替えるからDispose必要ですね(精神衛生上)
コードが冗長になって凹むけど一応書いておこう
0040デフォルトの名無しさん2010/12/18(土) 15:10:15
精神衛生上じゃないよ
Imageが占有するメモリはGCが関知しないから解放がすごく遅れる可能性が高い
0041デフォルトの名無しさん2010/12/18(土) 15:23:19
c#初心者です.DataTable教えてください
MSDNサンプルを実行してみたのですが,
ttp://msdn.microsoft.com/ja-jp/library/9ha04z01.aspx

table.Columns.Add(column);
でAddしたcolumnはどこに格納されるのでしょうか?
table.Columnsの中身を探しても見つかりません.
0042デフォルトの名無しさん2010/12/18(土) 15:43:29
>>41
table.Columns.Count は増えてる?
0043デフォルトの名無しさん2010/12/18(土) 15:50:04
増えてます
foreach (DataColumn dc in table.Columns)
  MessageBox.Show(dc.ColumnName);
とすると中身も表示されます.
ただ,デバッグ画面のローカルって所を探してもAddした情報がないので,
どこに格納されているのかなと思いまして.
0044デフォルトの名無しさん2010/12/18(土) 16:01:02
>>43
格納されているのは、認識通りでいいよ。
ちゃんと探せば出てくる。表示名がインターフェースに変わって、見つけづらいのかも。
0045デフォルトの名無しさん2010/12/18(土) 16:55:49
>>33
Bitmap bmp = (略
pictureBox1.Image.Dispose();;
pictureBox1.Image = bmp;

じゃだめなん?
PictureBox使ったことないからよくわからんけど
0046デフォルトの名無しさん2010/12/18(土) 17:08:32
>>45
ゆっくりやるとダメ。早くやれば問題がでづらいかも。
少し気持ち悪い。
0047332010/12/18(土) 19:22:11
>>46
まとめるとこう?
oldで挟むよりは気持ちいい

Bitmap bmp = (略
using(Image old = pictureBox1.Image){
  pictureBox1.Image = bmp;
}

Bitmapクラスの内部がどうなってるか知らないけど
BITMAPハンドル保持してるとかだったら
自前でDisposeしないと危ないね
0048432010/12/18(土) 19:25:07
>>44
_primaryIndexっていうパブリックでないメンバーにはいってました.
0049デフォルトの名無しさん2010/12/18(土) 20:41:52
VC#で作たWindowsアプリを、ASP.NET使ってIEで操作できるようにしたいんだけど
なんでPictureBox使えなくなるの?
HTML使った事ないから、まとな画像処理できねぇよwww
0050デフォルトの名無しさん2010/12/18(土) 20:43:01
Silverlight使えば?
たいがいなんでもできるよ
0051デフォルトの名無しさん2010/12/18(土) 21:02:16
>>49
画像処理するだけならPictureBoxはいらないでしょ。
0052デフォルトの名無しさん2010/12/18(土) 21:05:28
ASP.NETって何かわかってるんだろうか
ブラウザはサーバーが生成したHTMLをただ表示してるだけで
C#のコードは全部サーバー側で動作するんだよ? Windowsアプリとは全く違うんだけど理解してる?
ブラウザ側でC#動かして画像処理とかやりたいならSilverlightでも使わないと
0053デフォルトの名無しさん2010/12/18(土) 21:14:17
>>49
お前アホか。GUIコンポーネントがサーバで使えるわけねーだろ。
WebとHTMLを基礎から勉強してこい。
0054デフォルトの名無しさん2010/12/18(土) 21:22:33
>>50
silverlightググってみた、やりたかった事全部行けそうです!
マジで感謝!MS最高だわwww

>>51
PictureBox使わないと背景画像に透明の画像かぶせて、
その上に点とか線描画できないと思ってたんだ

>>52
そりゃ.NETって言うぐらいだから、Webアプリ用のフレームワークでしょ?
俺バカだけどそんぐらい理解してるっつーの!
0055デフォルトの名無しさん2010/12/18(土) 21:31:52
今度はXAMLわからないから画像処理できないとか言い出しそうだな
SilverlightはWinFormsとは比べ物にならない表現力があるけど
ASP.NET以上にWinFormsの知識が役に立たない
0056デフォルトの名無しさん2010/12/18(土) 23:28:46
これからSilverlightの時代だよ
0057デフォルトの名無しさん2010/12/19(日) 00:06:09
いや、どう考えてもHTML5だろ
Flashが辛うじて残るかどうかだ
0058デフォルトの名無しさん2010/12/19(日) 00:10:17
>>57
HTML5は軸が違うから比べても意味ない。
Windows 系の GUI が Silverlight になってく。
ただ、置き換わるのは数年後かねぇ。
「Silverlight の時代」って言うにはちょっと早い。
0059デフォルトの名無しさん2010/12/19(日) 00:12:24
あのー・・・WPFは・・・?
0060デフォルトの名無しさん2010/12/19(日) 00:12:36
そういうのとは勝負やめて、
簡単にビジネスアプリケーションを配布するための仕組みになった
ClickOnceに近い位置づけ
0061デフォルトの名無しさん2010/12/19(日) 00:19:46
Silverlight5はpinvokeがサポートされるから
極端な話だけどやろうと思えはWinFormsやWPFもSilverlightの上で動かせるね
単にクライアント専用の簡易版.NETを目指してるんだよ
0062デフォルトの名無しさん2010/12/19(日) 00:20:54
MSはもうWPFよりSilverlightのほうに力入れてるじゃん
0063デフォルトの名無しさん2010/12/19(日) 01:01:05
まあでも、WPFが消えるのは、Silverlightの機能がWPF相当になった時よ。
それがたぶん、数年後。
0064sage2010/12/19(日) 01:08:11
>>62
開発環境のWebDeveloperはベータ以前の品質じゃね? ドキュメントも英語しかないし。
0065デフォルトの名無しさん2010/12/19(日) 01:14:34
毎度の事ながらMS新技術出しすぎわろすw
0066デフォルトの名無しさん2010/12/19(日) 01:18:13
カバーしてる範囲が広いだけ。
0067デフォルトの名無しさん2010/12/19(日) 01:33:50
>>64
WP7かなんかと勘違いしてるだろ
SilverlightはVS2008や2010で正式にサポートされてるし
Express版のWebDeveloperもVC#と同時にリリースされてる
0068デフォルトの名無しさん2010/12/19(日) 01:39:40
>>59
49ですが、時代はWPFだと思うよ!!

試しにWPFでプロジェクト作成したら
普通にIEから、Windowsフォーム呼び出せたwww
Win32も使えるみたいだし、既存のWindowsアプリをWeb化するならWPF最強じゃん!!
おかげで1人月の案件が3日で終わりそうwww
0069デフォルトの名無しさん2010/12/19(日) 01:44:21
>>68
それ、対応してるブラウザー少ないよ。
それでいいって言われる案件なら、普通にデスクトップ版の WPF でいいと思うんだけど。
ClickOnce 配布いいよ。
0070デフォルトの名無しさん2010/12/19(日) 02:34:46
wpfなくなるつってもふつうに流用できそうだしな。
安心してwpf勉強するわ。
0071デフォルトの名無しさん2010/12/19(日) 10:27:01
萌えキャラのあるSilverlight一択だし。
0072デフォルトの名無しさん2010/12/19(日) 12:13:39
何をもってweb化と言ってるんだろうな
XBAPなんてウインドウ枠がIEになっただけ
0073デフォルトの名無しさん2010/12/19(日) 12:21:36
web化っていうと仕事は基本的にwebサービスにやらせるもんだと思うが
silverlightにしろwpfにしろ、クライアントだけで完結するものをwebアプリと呼ぶのかどうか
0074デフォルトの名無しさん2010/12/19(日) 12:30:18
wpfはしらんけどsilverlightはビジネスロジックは
webサービスじゃなイカ
0075デフォルトの名無しさん2010/12/19(日) 12:31:18
>>73
いや、WCF サービスとかでサーバーサイド作っておけば、
例えクライアント側がデスクトップアプリであっても Web 化と呼べるとは思うが。
0076デフォルトの名無しさん2010/12/19(日) 13:29:56
顧客にとって大事なのはブラウザの画面の中に表示されること。
処理がサーバなのかクライアントなのかなんて関係ない。
0077デフォルトの名無しさん2010/12/19(日) 13:40:13
>>75
俺らから見たらそうでも一般の利用者からしたらWeb化=ブラウザ上で使えるって思うかと
0078デフォルトの名無しさん2010/12/19(日) 13:41:40
断定すんなw
0079デフォルトの名無しさん2010/12/19(日) 13:54:15
>>76
あほな顧客が多くて困るって奴ですね。
いや、困らないのか、むしろその方がぼったくれて。
0080デフォルトの名無しさん2010/12/19(日) 13:58:21
Webが何かぐぐった方がよいと思うよwww
0081デフォルトの名無しさん2010/12/19(日) 15:15:45
Silverlightはともかく、XBAPなんて普通のデスクトップアプリとしてWPFを動かすことも
可能な環境がないと動かせないからなw
何の意味もありません
0082デフォルトの名無しさん2010/12/19(日) 15:36:31
ただねぇ、真の意味でクロスプラットフォームなのは、HTML5+Ajaxアプリですらなく、
サービス化してデータだけプログラム的に取れるようにしとくことだと思う。

正直、HTML5が理念通りに完全に互換性保てるとは思えないし、
UI 技術はすぐに入れ替わるし、プラットフォームごとに変わる。

で、そのサービスを受け取る側のクライアントアプリは、
もうクロスとか気にせず、WPF とかで作ればいいと思う。
凝ったUI作るなら、多重開発した方がマシ。
0083デフォルトの名無しさん2010/12/19(日) 15:49:37
まあWebを好む人の大半はソフトをインストールするのが面倒くさいからだから
>>76-77みたいなのはそんなにおかしくないな
0084デフォルトの名無しさん2010/12/19(日) 15:52:06
コンシューマー向けだとそりゃ、ブラウザー内実行必須だと思うけども、
業務系だとあれよ、Webですキリッって言いつつ、
帳票印刷の部分はClickOnceでデスクトップアプリ起動とかが普通よ。
0085デフォルトの名無しさん2010/12/19(日) 16:00:44
>>84
うるせえ
0086デフォルトの名無しさん2010/12/19(日) 16:11:02
>>84
まさにそういうニーズに応えるのがSilverlightでしょ
妙なイメージが付いちゃってるから名前変えればいいのに
0087デフォルトの名無しさん2010/12/19(日) 16:16:16
普通だけどそれでいいかどうかは客に説明して確認してからじゃないと

1人月が3日でできたとか言ってたらダメってことだ。
0088デフォルトの名無しさん2010/12/19(日) 17:21:06
>>87
は?残りの時間、自分の好きな事できるんだぜ
全然ダメじゃ無いじゃんwww
0089デフォルトの名無しさん2010/12/19(日) 17:33:40
まあ、客に説明してからにしろってのは正論として、
「1人月が3日になります」なら普通納得してもらえるけどもね。
0090デフォルトの名無しさん2010/12/19(日) 17:45:37
でも説明して三日でできるっていったら普通客は
じゃあ安くしてって言うでしょ。
それでも1人月払うよっていうならすごいいい客だな。
しっかり捕まえておかないと。
0091デフォルトの名無しさん2010/12/19(日) 18:27:03
せんせー、ここ初心者スレ
0092デフォルトの名無しさん2010/12/19(日) 18:44:33
10年プログラミングしているけど
未だにLinq、ADO.Net,SQLがさっぱりわからないし
必要と思ったこともない
ラムダ式は一応やるけど
0093デフォルトの名無しさん2010/12/19(日) 18:50:23
使いどころを知ってれば問題ないのでは?
存在すら知らないとそれは選択肢を減らすことになるからどうかと思うけど。
0094デフォルトの名無しさん2010/12/19(日) 18:51:06
>>92
DBを使う必要がなければとことん必要無い
0095デフォルトの名無しさん2010/12/19(日) 18:51:40
使っている人はどんなソフトを作っているのですか?
0096デフォルトの名無しさん2010/12/19(日) 18:53:07
データベースってどんなアプリにもありませんか?
リストを保存したりするのはよくあることだと思うんだけど
そういうときに使うと便利なの?
0097デフォルトの名無しさん2010/12/19(日) 19:15:31
だけどfirefoxですらsqliteを使っているという
0098デフォルトの名無しさん2010/12/19(日) 19:19:36
Janeもsqlite使ってなかったっけ?
そこまでのデータ扱うか?ってあるけどなw
肥大化してもっさりとか言われながらw
0099デフォルトの名無しさん2010/12/19(日) 19:21:39
LINQをそこに混ぜるなよ
0100デフォルトの名無しさん2010/12/19(日) 19:37:41
10年プログラムしてSQL触らないとかあるんだな
0101デフォルトの名無しさん2010/12/19(日) 19:40:33
元々DB使いだし、素でSQL書いたほうがいいじゃん、と最初LINQは毛嫌いしてたが
DBと関係なくLINQ便利だよな
■ このスレッドは過去ログ倉庫に格納されています