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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/11/28(木) 11:27:54.20
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問。
質問者自身なんだか意味がよく分からない質問。
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて、他スレ・他板へ行くことを勧められることがあります、ご了承下さい。

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

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

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

■関連スレ
C#, C♯, C#相談室 Part81
http://toro.2ch.net/test/read.cgi/tech/1381134494/

■コード貼るなら↓使ってください
http://ideone.com/
0116デフォルトの名無しさん2013/12/01(日) 09:48:33.34
公式に10行で云々ってページがあるからさw
0117デフォルトの名無しさん2013/12/01(日) 09:55:46.23
>>115
それ全件検索→配列作成→順次検索だからforで回すのの平均1.5倍かかるぞ
構文解析のコストとか無視しても
0118デフォルトの名無しさん2013/12/01(日) 09:58:23.31
ついでに言うと短くしたいのならパフォーマンスがいいのは.Select().FirstOrDefault()とか
0119デフォルトの名無しさん2013/12/01(日) 10:03:28.82
3倍だったわ
0120デフォルトの名無しさん2013/12/01(日) 13:00:31.86
C#er が速度なんて考えてるとはおもわなんだ!!!
0121デフォルトの名無しさん2013/12/01(日) 13:23:39.21
その程度の速度差が気になるならデータセットは使えないでしょうが
0122デフォルトの名無しさん2013/12/01(日) 13:28:58.22
速度無視しても>>115はありえない
全レコード該当した場合n要素の配列が2個必要だぞ
0123デフォルトの名無しさん2013/12/01(日) 13:29:00.90
前提条件が提示されていない中で
各々のポリシーに従って不毛な言いあいを続けるようなら
また両方にまぎれて煽りますよ
12時間くらい
0124デフォルトの名無しさん2013/12/01(日) 13:29:32.23
普通にforで回すのが最速だと思う
0125デフォルトの名無しさん2013/12/01(日) 13:31:40.19
今回はポリシー云々じゃなく万人が認めるべきアホなコードだから不毛じゃない
0126デフォルトの名無しさん2013/12/01(日) 13:44:14.64
ほう。
こんな表現もあったか。
データ件数が100件程度以内なら
int i = datatable.Rows.IndexOf(datatable.Select(".............")[0]);
でいいなぁ。上にコメントでもつけてくれれば。
0127デフォルトの名無しさん2013/12/01(日) 13:50:52.86
自演
0128デフォルトの名無しさん2013/12/01(日) 13:53:20.67
filterExpressionが原因のバグが頻発しそう
0129デフォルトの名無しさん2013/12/01(日) 14:02:42.61
頻繁するかは分からないけどリスクはあるよね
0130デフォルトの名無しさん2013/12/01(日) 14:39:36.83
VBのほうが利用者多いんでしょ。
C#とVBに差がないんならC#を何で選ぶの?
C一族なの?
0131デフォルトの名無しさん2013/12/01(日) 14:47:44.76
VB6から抜け出せない人用だし、選ぶ積極的理由が無いよ
0132デフォルトの名無しさん2013/12/01(日) 14:54:36.05
利用者が多いってのは何の統計なんだね
0133デフォルトの名無しさん2013/12/01(日) 14:58:13.95
当方C一族でして
0134デフォルトの名無しさん2013/12/01(日) 15:04:00.18
リーナス・トーバルズ曰く

*YOU* are full of bullshit.
C++ is a horrible language. It's made more horrible by the fact that a lot
of substandard programmers use it, to the point where it's much much
easier to generate total and utter crap with it. Quite frankly, even if
the choice of C were to do *nothing* but keep the C++ programmers out,
that in itself would be a huge reason to use C.

だいたいこれと同じ理由
0135デフォルトの名無しさん2013/12/01(日) 16:40:56.88
VBコードなんて見づらくて最初からやる気しなかったな
0136デフォルトの名無しさん2013/12/01(日) 17:52:29.22
スクリプトで遊び始めた頃にvbscriptを見るとなぜか吐き気を催したので
javascriptを選択してしまった流れで
0137デフォルトの名無しさん2013/12/01(日) 18:14:32.16
>>130
低レベルなコードも書きたいならC#
COMと相互運用したいならVB.NET
常識だろ
0138デフォルトの名無しさん2013/12/01(日) 18:14:34.87
C一族の者に御座る
0139デフォルトの名無しさん2013/12/01(日) 18:16:20.04
Dim Unko As String
string unko;
どっちが見やすいかな?
0140デフォルトの名無しさん2013/12/01(日) 19:56:01.66
vbはこれができるんだぜ
Dim number = 1, text = "hoge"
0141デフォルトの名無しさん2013/12/01(日) 19:59:18.75
だからどうしたというレベル
0142デフォルトの名無しさん2013/12/01(日) 20:02:11.62
ムムム
If 5 == 5 Then
Console.WriteLine();
End If

if (5 == 5)
Console.WriteLine();

どっちが見やすいんだよ?
0143デフォルトの名無しさん2013/12/01(日) 20:10:15.18
C#スレで聞いてどうする
0144デフォルトの名無しさん2013/12/01(日) 20:33:46.18
If 5 == 5 Then Console.WriteLine();
0145デフォルトの名無しさん2013/12/01(日) 20:34:19.66
まだ間違ってるぞ
If 5 = 5 Then Console.WriteLine()
0146デフォルトの名無しさん2013/12/01(日) 20:44:30.76
    l'''-、    .t―--、   .!¬、          > 、              r‐ ,          >-、     >、___
 .lヽ,,| il,,..、   ,ゝ--′   | | 、        / ./ t-、            ,,,  | レ''')      ! . ゝ、,. t,   >   `!
  ゙ヽ、 __,ノ   , -''',゙ ̄''、 <゙゙´ レ'',゙ ̄\ .l゙‐''"゛.,i、`'i lヽ   _,_._,,、 ヘ ̄ .,,..-',゙ _ ト‐'" .,i  l, l.ヽ / .厂 ̄゛
 / !/ ,l_r-,.´>、 ヽ,,./   | .l `フ  / ̄│ .l `-7 ./ .l .! .l l l'‐'゙/'''''''、.ヽ  / /ィニ二_,,,ノ ゝ7 ./ .l ! ゙l l .! !_.. - 、.
 ヽ、   ./゙l .l      l  ! /  !    } ! / ./ l /!││゙''"    .} | l゙ / ,,.'"゛    / ./  l l | |.l  ン"゙゙''、 ヽ
  .! l ̄ .,ノ |    ノ  ノ∠   !   ノ ノ / .iト,,ノ /  .゙''゙      / . l ,/ / ./.!  ._....、./ .,l ト,,/ /  .゙''゙ L./    /  }
  .ヽ `゙゛ . /  ._,,/_,/   .! l ∠‐"  |__/ ヽ ./       ._.. ‐,゙..-゙ ! / .l、.´   ,!| ./ l ./      . __,, / ,.ノ
    .`゙゙゙゙゙゛   `⌒       `゛         `´       .  ̄´   `"   `"'''''"゛    `゛      `゙'''''゙゙´
0147デフォルトの名無しさん2013/12/02(月) 01:46:32.63
VBって未だにサブルーチン呼び出しは括弧付けたら駄目っつー変態バカ仕様でやってんの?
0148デフォルトの名無しさん2013/12/02(月) 02:10:49.67
ListViewでListViewItem一個一個に
ユーザーデータを追加させたいのですが
(MFCのCListCtrlのSetItemData/GetItemDataみたいなやつ)
どのようにすればいいでしょうか?
0149デフォルトの名無しさん2013/12/02(月) 06:47:01.04
Tag
0150デフォルトの名無しさん2013/12/02(月) 08:13:07.79
ListViewを継承してお好きなプロパティでもなんでも持たす
0151デフォルトの名無しさん2013/12/02(月) 08:13:48.83
×ListViewを継承してお好きなプロパティでもなんでも持たす
○ListViewItemを継承してお好きなプロパティでもなんでも持たす
0152デフォルトの名無しさん2013/12/02(月) 08:49:50.39
コントロールは多くのプロパティをオーバライドできないのだけど
どういう設計思想なのこれは?
0153デフォルトの名無しさん2013/12/02(月) 10:16:32.35
いいから黙って書け
0154デフォルトの名無しさん2013/12/02(月) 12:19:57.30
>>152
.NetのComponentモデルの世界では
基本的にメソッド呼び出しやプロパティの読み書きは実行時に解決して呼び出す決まりで
ライブラリもそうなってるしユーザコードもそれに従わなくてはならない(まあ従わなくても動く事が多いが)
だからoverridesはなくshadowsを使えば良い
0155デフォルトの名無しさん2013/12/02(月) 12:45:21.71
c#は最終的にはlinuxでも標準になるん?
0156デフォルトの名無しさん2013/12/02(月) 13:53:00.15
C#で小数点を扱う場合、doubleの方が良いのでしょうか?
単純な計算の繰り返しだけならfloatの方が若干早くなりますが、
doubleとfloatが混ざってキャストしたりすると遅くなるので、
計算式にもよると思うのですが、doubleで統一しておいた方が無難でしょうか?
よろしくお願いします。
0157デフォルトの名無しさん2013/12/02(月) 13:56:04.19
floatの利点は格納スペースが少なくてすむくらいかな
0158デフォルトの名無しさん2013/12/02(月) 13:58:40.96
floatとdoubleの比較ならまあdouble一択でいいだろ
decimalとの比較は用途次第
0159デフォルトの名無しさん2013/12/02(月) 14:53:24.25
>>157-158
ありがとうございます。
fを付け忘れたり、ただ割っただけですとdoubleにキャストしてしまいますので、
そこまで精度が必要で無くてもdoubleにて計算するようにします。
0160デフォルトの名無しさん2013/12/02(月) 15:21:19.54
>>147
call 書けよ
0161デフォルトの名無しさん2013/12/02(月) 15:55:58.31
>>149
ありがとう
0162デフォルトの名無しさん2013/12/02(月) 20:42:14.83
型 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' の初回例外が Microsoft.CSharp.dll で発生しました

これが大量に出るのを抑制する方法はありますか?
0163デフォルトの名無しさん2013/12/02(月) 21:14:30.01
vc2010を使っています

現在作成しているソリューションの一部を後々使いまわせるようにdll化したいと思っています
調べると別ソリューションを作成してクラスライブラリとして作成、コンパイルすればdllすることができるとあったので、別ソリューションで作成し、参照することも出来ました
ただ、今後の開発を考えると1つのウィンドウで作業していきたいのですが、異なるソリューションを同じウインドウで開発したり、
dllを参照している側でコンパイルするとdll側もコンパイルされるような設定はできますでしょうか?

別ウィンドウで作業し、dll側をコンパイル後、参照側をコンパイルすることしかできないのでしょうか
0164デフォルトの名無しさん2013/12/02(月) 21:23:35.68
>>163
ソリューションからプロジェクト追加
0165デフォルトの名無しさん2013/12/02(月) 21:25:04.58
依存関係の設定を忘れないように
0166デフォルトの名無しさん2013/12/03(火) 14:35:06.49
ありがとうございます

「既存のプロジェクト追加」でdll側のcsを追加し、「参照の追加」でdll側のソリューションの作成したdllを指定しています
しかし「既存のプロジェクト追加」で追加したcsを編集してもdll側のcsには反映されてないようで、ビルドした際にもdll側のビルドはされていないようです
依存関係というのが大切そうなので、調べてみたところソリューションのプロパティから「プロジェクト依存関係」まで辿り着いたのですが、
dll側のプロジェクトが表示されておらず、設定ができませんでした

なにか設定が足りないのでしょうか
0167デフォルトの名無しさん2013/12/03(火) 14:39:22.88
使いまわすだけならdllにしなくてもいいって疑問は無し?
0168デフォルトの名無しさん2013/12/03(火) 14:50:36.50
とりあえず参照の追加で指定するのはdllプロジェクトかな、普通は
0169デフォルトの名無しさん2013/12/03(火) 15:04:10.35
説明不足ですみません
もちろんdllを指定しています

>>167
他のアプリで使ったりと色々としたいことがあるので
0170デフォルトの名無しさん2013/12/03(火) 15:17:00.61
追加するのはdllじゃなくてプロジェクトだぞ
0171デフォルトの名無しさん2013/12/03(火) 15:18:39.21
もしかしてつかってるVSってEXPRESSか?
複数プロジェクトいけるEXPRESSっていつからだっけ
0172デフォルトの名無しさん2013/12/03(火) 16:12:00.06
ありがとうございます
EXPRESSを使っています

いろいろ試してみて
メニューバーのプロジェクトの「既存のプロジェクト追加」ではなくソリューションエクスプローバーでソリューションを選んで「追加」を選択すると
「プロジェクト依存関係」が設定できるようになり、使用側のビルトでdll側もビルドされるようになりました
この2つが別物だったんですね・・・

もう1つ教えてください
上記の過程でdll側を一度ソリューションから作りなおしたのですが、今度はdllを参照に指定してもusingの宣言で「usingもしくはアセンブラがないよ」と言われるようになってしまいました
オブジェクトブラウザで見るとdllの名前空間が表示されておらず、ソリューションエクスプローバーのコンテナにはdllが表示されているという歪な状態になっています
試しに別名のtestというソリューション名、class1と言うクラス名でdllを作ってみると無事参照されてしまいました
dllのnamespace、class名が怪しいのかと思って確認しましたが、統一されてました
「オブジェクトブラウザで見るとdllの名前空間が表示されておらず、ソリューションエクスプローバーのコンテナにはdllが表示されているという歪な状態」についてわかることはありませんか?
0173デフォルトの名無しさん2013/12/03(火) 16:35:07.83
すいません、自己解決しました
classにpublic付けてませんでした・・・
アホすぎわらえない
0174デフォルトの名無しさん2013/12/03(火) 16:58:57.81
>>173
m9
0175デフォルトの名無しさん2013/12/03(火) 17:03:21.71
>>173
どんまい
0176デフォルトの名無しさん2013/12/03(火) 18:16:38.97
まずソリューションとプロジェクトとDLLの区別付ける所から初めて下さい
0177デフォルトの名無しさん2013/12/03(火) 19:48:28.78
>>173
安心しろ。俺もはまったことがあるw
0178デフォルトの名無しさん2013/12/03(火) 20:14:05.93
だから全部publicにしろって言ったんだ。
0179デフォルトの名無しさん2013/12/03(火) 20:18:32.34
全部グローバル
0180デフォルトの名無しさん2013/12/03(火) 20:26:05.45
全部スタティック
0181デフォルトの名無しさん2013/12/03(火) 20:38:07.94
全部下請け
0182デフォルトの名無しさん2013/12/03(火) 21:37:39.54
デバッグなしで実行とデバッグありで実行って
挙動としては何が違うんですか?
0183デフォルトの名無しさん2013/12/03(火) 21:47:20.68
デバッグするかしないか
0184デフォルトの名無しさん2013/12/03(火) 21:49:14.97
デバッガの子になるかならないか
0185デフォルトの名無しさん2013/12/03(火) 23:33:53.23
アクセス修飾子の最適化問題はNP困難な割にやったところで大したメリットが無いから
解こうとしないほうが良い
0186デフォルトの名無しさん2013/12/03(火) 23:44:24.00
アクセシビリティのエラーとか忘れること多いわ
0187デフォルトの名無しさん2013/12/04(水) 00:03:07.88
Windows フォーム アプリケーション で、チェックボックスを使って
5つの選択肢の中から1つしか選択できないようにする方法ってありますか??
例えば、二つ目を選択しようとしたら、前に選択したチェックボックスのチェックは
ちゃんと消える、みたいな…
要するにアンケートみたいなものを作りたいんです

なんかわかりにくくてすみません
0188デフォルトの名無しさん2013/12/04(水) 00:14:34.11
>>187
そういうケースではCheckBoxじゃなくてRadioButtonを使うのがWindowsのルールですよ
0189デフォルトの名無しさん2013/12/04(水) 00:20:20.46
>>187
釣りだろ
ラジオボタン以外ありえんだろ
0190デフォルトの名無しさん2013/12/04(水) 00:22:49.05
なんでも釣り釣りって
0191デフォルトの名無しさん2013/12/04(水) 00:25:47.81
ラジオボタンはHTMLでもWindowsでもそのほかでも当たり前のように存在してるけど
あれをラジオのボタンと言われてもピンと来ないな
0192デフォルトの名無しさん2013/12/04(水) 00:26:05.27
ラジオボタンでしたか すみません
ラジオボタンにした場合、どうしたらよいのでしょうか??
0193デフォルトの名無しさん2013/12/04(水) 00:28:58.22
同じフォーム、同じパネル、同じグループボックスに放り込めば勝手に排他される
0194デフォルトの名無しさん2013/12/04(水) 00:33:01.13
>>193
ありがとうございます!!調べてみたらいけそうです!!
0195デフォルトの名無しさん2013/12/04(水) 00:33:50.24
そういやCheckBoxの中間のやつってどうするの
trueでもfalseでもないやつ
CheckBox.Checkedってnull非許容型だよね?
0196デフォルトの名無しさん2013/12/04(水) 00:38:02.50
CheckState.Indeterminateだろ
0197デフォルトの名無しさん2013/12/04(水) 00:39:25.09
そんなのあったんか
サンクス
0198デフォルトの名無しさん2013/12/04(水) 08:40:56.70
staticクラス使えるのに未だにシングルトン使うやつがうざい
0199デフォルトの名無しさん2013/12/04(水) 11:56:18.46
SplitContainerとかTableLayoutPanel使って、Anchor設定するとサイズが自動でグリグリ動いて気持ちいいんだけど、
ボタンとか配置した時に思うように動かないから、怖くて使えねぇ;;
みんなは使いこなしてるの?
0200デフォルトの名無しさん2013/12/04(水) 13:46:18.31
C#でプログラミングしていて凄い発見をした。すべてstaticメソッドにするとアホみたいに捗る。
http://engawa.2ch.net/test/read.cgi/poverty/1386083303/
0201デフォルトの名無しさん2013/12/04(水) 15:50:10.28
>>198
起動即初期化だから、staticクラスが使えない場合も少なくない
0202デフォルトの名無しさん2013/12/04(水) 16:47:41.87
staticコンストラクタが動くのは、
初めて型にアクセスしたときだったような
0203デフォルトの名無しさん2013/12/04(水) 18:01:12.07
>>201
それをお前に教えた奴つれて来いよ
膾にしてやる
0204デフォルトの名無しさん2013/12/04(水) 18:13:29.76
http://www.microsoft.com/en-us/download/confirmation.aspx?id=7029
C# Language Specification 5.0

10.12 static constructors (P713-714)
The execution of a static constructor is triggered by
the first of the following events to occur within an application domain:
* An instance of the class type is created.
* Any of the static members of the class type are referenced.
0205デフォルトの名無しさん2013/12/04(水) 19:20:47.71
ジェネリック型のstaticメンバーをどうやって起動時に初期化すると思ったんだろうか
0206デフォルトの名無しさん2013/12/04(水) 19:31:49.46
まったく関係ない話だが、VBはインスタンスフィールドをインスタンスメンバーで
初期化できるんだよね。

安全性を考えればC#の仕様の方が妥当なんだろうけど、時々この機能があったらと思うときがある。
0207デフォルトの名無しさん2013/12/04(水) 19:32:49.44
上の初期化ってのは宣言と同時の初期化のことね。
0208デフォルトの名無しさん2013/12/04(水) 20:03:43.93
そんなことよりoption引数の初期値にメンバ指定させろ
0209デフォルトの名無しさん2013/12/04(水) 22:45:59.86
globalの使い道がわからん
0210デフォルトの名無しさん2013/12/04(水) 22:51:15.22
名前が被らないようにするためにglobal::System.Consoleのようにして使う
基本的にコード自動生成ツールを作るときに念のため使うもので、普通は要らない
0211デフォルトの名無しさん2013/12/04(水) 23:53:30.21
なるほど
普通は使わんな
0212デフォルトの名無しさん2013/12/05(木) 00:12:54.30
無理やり必要にしてみる・・・
namespace Foo {
 class System {
  public const int Console = 0;
 }
 class Hello {
  const int Console = 7;
  static void Main() {
   global::System.Console.WriteLine("Hello");
   //System.Console.WriteLine("Hello"); // error
  }
 }
}

extern aliasと並んで使わない機能の2トップ
0213デフォルトの名無しさん2013/12/05(木) 00:48:44.33
extern aliasはどうしても同じライブラリの別バージョンを使わないと仕方がない場合に神
一番意識して使うことが少ないのはpartial methodだろ
0214デフォルトの名無しさん2013/12/05(木) 06:42:21.15
partialメソッドはカスタムツール作らなきゃ定義する必要がないし
T4のおかげで敷居は下がったのかな?
0215デフォルトの名無しさん2013/12/05(木) 08:56:43.65
適当にHttpListener使って簡単な串作ろうとしたんだけど、
アドレスのホスト名がIPになるとListenerが受け付けてくれない。
具体的には、例えば http://google.co.jp/ は受け付けるけど、
同じくグーグルのアドレス http://74.125.235.87/ になると Bad Request (Invalid Hostname)
なんだけど、これは仕様なのかやり方が悪いのか回避方法があるのか分からないので教えてくだしあ
http://ideone.com/XKLFdF
■ このスレッドは過去ログ倉庫に格納されています