前スレでリストの抽象化に関して聞いた者ですが
もう少し整理して説明すると下記のコードの"IList<共通の型>"部分を
共通の型で作れないかなと考えておりました
クラスならばインターフェースで共通の型に出来ますが
リストのようなコレクションも出来たら良いなと
class Hoge
{
public string Hogege { get; set; }
}
class Fuge
{
public string Fugaga { get; set; }
}
class Program
{
static void Main(string[] args)
{
IList<共通の型> dto1 = new List<Hoge>();
IList<共通の型> dto2 = new List<Fuge>();
}
}
>>7
いまいち意味不明なんだが、同じリスト型で管理したいクラスってことは
それぞれis-a関係になる共通の継承元があるはずだろ?
class Hoge : 共通の型 {...}
class Fuga : 共通の型{...}
var List<共通の型> = new List<共通の型>();
でダメな理由がわからん
これで「HogeとFugaを抽象化した型」のリストができるだろ?
リストその物の抽象化って話なら、List<T>がそのものズバリなんだから、
何を言いたいのか理解できてない
せめて用途を説明してくれ みんなListList
Dictionaryのがいいよ
何がやりたいか(目的)を書いた方が良いと思うよ
未だ意図不明だけど
System.Collections.ArrayList
が望みのもの?
>>7
それが実現できても何の得もないよ
IList<object>にして突っ込めばいいけどそれで何の意味があるんだか ふらっとあるある
万能クラスをListに突っ込んで俺すげー
プロパティについて教えてください
setとgetが呼び出されるタイミングがよくわかりません
以下のようなコードがあったとしてsetが呼び出されるのはTestに値が代入された時という理解で合っていますか?
getはsetが呼び出されると自動的に呼び出されるというようなぼんやりした理解なのですが正しいでしょうか?
またgetだけが呼び出されるケースもあると資料で見たのですがそれはどのような使い方をした時なのでしょうか?
初歩的な質問で申し訳ありませんがよろしくお願い致します
Private int test
Public int Test()
{
set {
test= value;
}
get {
return test
}
}
public void Main()
{
Test=100;
}
>>16
すいません
iPhoneから書いたのでコードを上手く書くことが出来ていません get setの中にConsole.WriteLineでも書いてみたら分かるよ
>>16
作成したプロパティを使う方からは、変数のように見えるって言えば分かる? >>16
プロパティに代入 setだけが呼ばれる
プロパティを読出し getだけが呼ばれる
現在時刻を返すプロパティ DateTime.Nowとかだとgetしかいらない 俺が作ったプログラムを起動させた結果
>>22
電気の無駄使いやね。使った分発電しなされ >>24
エロ動画詰まったZIPを
Parallelで解凍したらこうなった
40個位 リストの抽象化を相談した者ですがList<T>の使い方を調べようと思います
ありがとうございます
parallelって、積んでるCPUの数以上に並列化するとしぬの?
>>31
必ずしもそうではない
IOなどでCPUが暇になることがあるならその時間を有効に使える場合がある たまに単純すぎる処理までParallel化してあって逆に糞遅くなってるの見るともにょる
これまで客の要望で20個ぐらいParalleにしたけど
一つとして早くなったことないよ
ボトルネックがIO周りなのに勘違いしてる奴多過ぎな気がする
ハードディスクに保存するのもIOやで?
って言ってわかるやついねーよな
パンピーじゃ
>>36
ファイルI/O関連は下手にパラるとシーク待ち時間が増大しちゃうしね parallelで解凍したエロ動画はRAMディスクに出力したよ
7分→2分になったよ
VSでもC#でもないからややスレチになるが、
make に-j4 付けてもビルド70分くらいから60分くらいになるだけであまり速くならなかったのに
さらにノートン先生でビルドするディレクトリ外したら20分になったことがある
新規ファイルが大量に出来る場合、パラレルにしても変わらないと感じるなら、I/O以外にもタスクマネージャーでウィルスチェックしてないか確認必要
いまの最新並列プログラミング手法はparallelなの?
シングルスレッドで非同期I/Oが速いと言って見る。
技術的な質問じゃないんですが、C#よりVBが優勢って本当ですか?
非同期IOは旧来のクライアントごとのスレッドでリクエストをさばくやり方よりオーバーヘッドが少ないから
C10Kに耐えられるってだけで、シングルスレッドのままじゃ性能は高くない。
性能を求めるならそれをコア数分のスレッドで走らせる。
>>43
技術的に答えさせていだだきます
C#よりもVBの方がキーワードの数が多く難易度も高くなりますから
使用するプログラマーの能力的にはVBの方が優勢であると言えるでしょう Parallel処理内で
一つのListにAddしてっても文句言われない?
>>56
天才かよ
>この型のpublic static (Visual Basic ではShared) メンバーは、スレッド セーフです。
>>57
それ遅いらしい >>58
それstaticメンバ以外はスレッドセーフじゃないってことだぞ
あと、たかがListのAddのロックのコストが問題になるような状況なら
Listを共有しないでスレッドローカルでList作って終わってからマージした方がいい >>58
Addとかインデックスでの参照はオブジェクトのメンバだろ?ダメじゃん。
結局lockしかない いるんだよなあstaticアンチ
staticでスレッドセーフなら万々歳だけどね
>>62
お前は何を言ってるんだ
Listをstaticフィールドに入れたらスレッドセーフになるんじゃなくて、
Listクラス自身のstaticメソッドに限ってスレッドセーフであるということだぞ つまりどういうことだってばよ…
こういうことちゃうんか?
class Hoge
{
public static List<Huga> aaa = new List<Huga>();
private void ParallelOjisan()
{
Parallel.ForEach(aaa, op, a =>
{
Hage h = new Hage();
aaa.add(h.GetData(a));
});
}
}
動いたぞ
>>65
>インスタンス メンバーの場合、スレッド セーフであることは保証されません。
ちゃんと読め public static List<Huga> aaa;
これでええんか?
>>69
あ…そうなんだ…
じゃあ作らなきゃstaticなAdd パラレルに追加したらその順番が保証されないことくらい分かるだろうに、なぜList?
>>70
private object hoge = new object();
lock (hoge) {hogeList.add(foo);} >>70
staticだからスレッドセーフなんじゃねーよw
Listのstaticメソッドは全部スレッドセーフに作ってるよってマイクロソフトが言ってるだけw
素直にlock使うか>>59で言ってるようにしろw staticにすればスレッドセーフになると誤解してそう
これMSが説明下手なだけだからね
Lockおじさんの言うとおりにするよ
てかスレッドローカルおじさんがわからん
スレッドローカルなのにあとでマージって出来るん?
もしかしてParallel処理終わっても
スレッド指定してその中身取れるの?
System.Collections.Concurrent名前空間のスレッドセーフなコレクションクラス使えば
ConcurrentBagはロックフリーじゃないぞ
追加と取り出しを並行して行うために作られた複雑なコレクションで、オーバーヘッドも大きい
追加だけなら滅多に競合しないはずだから、普通にロックしたほうがむしろ速いんじゃないか?
ああ、もうそんな時期か
しかしAlilExpressは相変わらず胡散臭い出品者多すぎ
>>82
オーバーヘッドデカイけどそれ以上に楽だからConcurrent系はよく使っているわ 結果を集める必要があるならそもそもParallelよりAsParallel.SlectMany使ったほうがいい
競合を気にせずに結果返すだけでいいしマージも勝手にやってくれる
初歩的な質問ですがお願いします。
C#で画像ビューアを作製しています。
ドラッグアンドドロップで画像を表示する事はできたのですが、
ダブルクリックして画像を表示する方法が分かりません。
jpeg等の画像ファイルに自作プログラムを関連づけておいて
ファイルをダブルクリック→自作プログラムが起動して画像を表示、という様にしたいです。
この方法について解説しているサイトか
ググるためのキーワードだけでも教えてもらえるとありがたいです。
>>88
Mainの最初にブレークポイント置いてargsの中身を見てみよう >>88
「プログラムから開く」で自作ソフトを選択して起動させるとmain関数の引数にダブルクリックしたファイルのパスが入る。 >>88
「ファイル 関連付け」でググれ
C#関係ないと思うんだが >>92
あ、そうかファイルパスとらないとか失敬
Environment.CommandLineでも取れるよ プログラミング初心者に英語ドキュメント突きつける鬼畜
まあ今時
と言うかこれからはと言うか
英語のドキュメントのリーディングくらいは必須スキルかもね
MSもいつまで日本語ドキュメント提供してくれるか分からんよw
>>89-84
予想外に沢山のレスありがとう
なるほど、Main関数の引数からパスを取ればいいのね
GUIでも内部的にはコマンドラインと同じってことか
GUIアプリって作ったこと無かったから難しく考えすぎてたよ プログラミングと英語の能力は関係ないのでは(´・ω・`)
>>101
国語能力を含めた言語能力はプログラムと関係するよ。
まともな文章の書けないやつのプログラムソースはグダグダ。 >>101
うむ
今は不自然な日本語の時に原文確認する感じやね 仕様書やライセンスの類なら中学生レベルの英語で十分だと思っている
それで困ったら何でもできるグーグール先生に投げよう
>>102
これはある
まともな日本語書けない奴って、自分のアウトプットを客観的に評価する能力がないんだと思う >>101
なんだかんだ言ってプログラミング関連の情報は英語で書かれてることが多い
なので同じような頭持ってたら英語ができる方が有利ではある >>102
それ文章に限らず何やってもバカなだけだろ まあ、C#とか人気言語はともかく、マイナー言語だと「英語」しかない
→仕方なく英文読む機会が増えて英語スキル上がる、はあるな
英語だと読めないことはないが直感的に読めないので読む気失せるから嫌だ
言葉に関する能力でプログミング能力と関係がありそうなのは
説明的な文章を書く能力だろうけど、個人的にはまったく無関係とも思えんけど
そこまで関係するのかなという気もする。微妙だね
>>111
英語の仕様書より同じ目的のCのソース読むほうがずっと楽とかよくあること 文章構成はプログラムに近いんじゃない
どういう順で話せば納得させやすいか、意見が通りやすいかとか?
C#とJSって同じ部分があるんですけど
同じ部分はJSと同じ感じで使ってもいいんでしょうか
>>115
そういうのを要件そろえて説明するべきという話でした
英語と日本語で同じような発音のものあっても同じ意味とは限らないでしょ DB接続を抽象化する為にインターフェイスの使用を考えていますが、取得する項目を明示したい場合ってどういう風にすればいいのでしょうか?
例えば
class Book
{
public string Title{get;set;}
public int Price{get;set;}
public int Pages{get;set;}
}
の形式でDBから取得してればどのDBでも使えるインターフェースを作りたいのですが、このBookの定義をどこに記述できるのかが分かりません
>>118
ありがとうございます
内容見ましたが、この場合はインターフェースは不適切で抽象クラスが正解って事でしょうか
他にもこの2つの違いについて記してあるサイト見ましたが一部明示的な実装するには抽象化クラスと言うわけですね >>117
使ったことは無いんだがDbProviderFactoriesと言うものが.NETにはあったはず。この車輪では駄目なのか。 >>102
そりゃ当たり前だよね。
究極の無能相手に、伝わるように、過不足ないように、なにより丁寧に仕事内容を説明するお仕事だもんね。PG って。 >>121
というか、自然言語に置き換えられないプログラム書くやつはクソってだけだろ >>120
こういう関数もあるのですね、ありがとうございます
調べましたがどこまでの範囲で接続に使えるか分からないので今回は見送ろうかと思います
参考サイトは多い感じなので便利な機能そうでした
DBと書きましたがcsvやExcelといったものからも取得を考慮していました
少し仕様説明が足りてませんでしたね・・・ APIを使用したファイル変換の変換状況を知るために自作メソッドのGetStatus()をSystem.Timers.TimerのElapsedイベントに設定して200msecごとに状況を取得することができました。
その変換を繰り返し行う際、そのタイマーのイベントが発生している時でも次のファイル変換を実行してしまいます。GetStatus()で変換終了判定が出た場合(Timer.Enabled=falseのあと)に次のファイル変換を行うようにしたいのですが、どのようにしたらいいでしょうか?
タイマーイベントのイベントハンドラの最初の行でEnableをFalseにして処理が終わったところでEnableをTrueにする
>>125
早速ありがとうございます。
今実行環境がないので後ほど試してみます。
ちなみにその記述ではどのような挙動をするのでしょうか? >>124
正直、何を言ってるのかさっぱり分からないし、それが俺の読解力のせいだと思えないw
その変換とやらを実行するクラスなりメソッドなりが、
現状、一つのファイルの変換が終わると次のファイルの変換を自動的に始める
仕様になっているんだと思うが、それを自動から手動、つまり外から明示的に
メソッドを呼ぶなり特定のプロパティの値を変えるなりしないと次のファイルの変換が
始まらないように変えるだけのことじゃないの? >>96
自動翻訳がこれだけ発展してる中で何時代錯誤な事いってんのw
センスないよ MSの日本語ドキュメントなんて機械翻訳だらけなのにな
>>127
>>128
下手な文ですみません
TimerのElapsedで指定したイベントが発生中は次の処理をせずに、Timer.Enabled=falseになってから次の処理を実行するものだと思っていたんです
>>128さんの言うように変換終了判定の場合にプロパティかフラグを立ててそれを監視?するようにしてみます >>129-130
今の自動翻訳だと結局原文参照にいくことも多々あるんだが...
なんのためにカーソル置くと原文表示するようにしてるのかも理解してないのかよ w
すごくウザイから設定で表示しないようにして欲しいが 機械翻訳はありゃいいってものじゃない
また宇宙天啓データベースG2と断続的な絞首刑が発生するぞ
最近、プログラミングの腕をそれ以外に求めてる奴が暴れててウザイ
英語ができたからなんだってんだよ
くだんねーアプリしか作れないからくだんねーこと気になるんだぞお前
>>123
>DBと書きましたがcsvやExcelといったものからも取得を考慮していました
世の中には、ODBCと言うものがあって、odbc excel driverとかodbc text driver や他のdbも使える
つ ?System.Data.Odbc.OdbcConnection >>134
コンプレックス丸出しだな
ドカタから出て自社プロダクト系とか行ったらC#でも日本語ドキュメントのないライブラリもバリバリ使うぞ >>136
nugetのライブラリで日本語ドキュメントがある方が稀だからね。 いわゆるドカタとそれ以外で認識の隔たりがかなりあると思う
ドカタ系にいたときもわりとアメリカの新しいパッケージや製品を使う仕事してたが
専門卒の委託のメンバー達はITスキルはあるのに英語が読めなくて全然仕事できなくて不憫だったわ
英語ができないと国内でも後追いになっちゃう
>>136
だからなんだよ
テメーみてーな発達障害持ってなきゃ英語なんか読めなくてもマニュアルのいみぐれーわかんだよバーカ
英語読めるからぼくちゃんのプログラミングの腕も確かでチュよ褒めてって?
気持ち悪ぃんだよさっさとくたばれガイジ http://tercel-tech.hatenablog.com/entry/2015/04/29/181723
こちらの方のコードを参考に電卓の自動化を試みてるのですが、
mainForm = AutomationElement.FromHandle(process.MainWindowHandle);
のところでエラーが出ます。
型 'System.InvalidOperationException' のハンドルされていない例外が System.dll で発生しました
追加情報:プロセスは終了しているため、要求された情報は利用できません。
何が原因でしょうか? >>147
そのページの同じコード動かしてそうなるのか?
メッセージだと電卓が終了してると言ってるけど >>147
電卓("calc")が起動しているか
デバッガでprocessがnullになっていないか
をそれぞれ確認
全部こっちで確かめるのはめんどうなので例えば
Thread.Sleep(DEFAULT_WAIT_TIME);
の部分を
while(process=null){Thread.Sleep(DEFAULT_WAIT_TIME);}
と書き換えてみるとか。いい加減な方法だからデバッグ時以外に勧めないが ヤバい
while(process==null){Thread.Sleep(DEFAULT_WAIT_TIME);}
だったw
自分の環境はwin10で以前までと仕様が違いますよね。
それが原因かもしれません。
電卓のウィンドウハンドルを直接指定してやったら正常に動きました。
ここの方は親切ですね^^
頑張りたいと思います。
実行してもフォームが固まらないアプリって全部にDoEventsが入ってるわけなん?
メッセージキューは排他のために処理待ちになるん
>>152
重い処理は別タスク(スレッド)を作って、UIから分離する。 c++
void __stdcall systemcall(string passbuf,bool wait_flag)
c♯
[DllImport("sample.dll", CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
private extern static int systemcall(string passbuf,bool wait_flag);
これで
systemcall("dir", true);
保護されていないメモリがどうの出てエラーになりますが何がいけないのでしょうか?
c♯側のvoidがintになってましたが記述ミスです><
エラー内容は正確には
ハンドルされていない例外: System.AccessViolationException: 保護されているメモリに読み取りまたは書き込み操作を行おうとし ました。他のメモリが壊れていることが考えられます。
std::stringはマーシャリングできない
C++側でchar*を受け取るラッパーを用意してやる必要がある
C++/CLIもあるけど完全に死んだ技術だからお勧めできない
>>161
>C++/CLIもあるけど完全に死んだ技術だからお勧めできない
死亡宣言されてるの? >>162
確かそうだよ
メンテナンスされてないから使うなって言われてる >>163
C++/CLIの件
たまに使うから気になる
ソースか検索キーワードプリーズ >>165
ありがとう
フォームアプリで使うな、なら納得 >>168
c/c++のライブラリをラッピングするためにある。 http使ったほうがいいよ
今はもうネイティヴコールする時代じゃない
C++/CLIって、なぜか使ったことなさそうな人にやたら叩かれるよねぇ。
自分に必要なけりゃスルーしとけばいいのに、わざわざ「要らない」アピールするのが謎だ。
>>172
ん?
人の意見を聞きたくないなら掲示板なんて見なきゃいいと思うぞ >>171
今からの世代はいらないかも知れないが、今までの世代は必要なんだわ。
過去遺産の再利用でしかないがね >>175
だからMSも力入れてない(2008の時代はインテリセンスすら使えなかった)し、そろそろ打ち止めってことかと >>170
ApacheもNginxもGoogle V8もLinuxもc言語なんだが。
サーバサイドのサービスもc言語のもあるだろ。 >>177
過去のもの過ぎwww「今」の話題にそれはどうかと思うぞ >>179
そうか、NginxもGoogle V8も過去のものなのか
時代は変わったな。 まあ最新技術はPythonやPHPで実装される時代だしな。
>>177
dotnet関係ないじゃん
Cが要らないんじゃない
相互運用が要らない いや、Cは要らないだろ。
Pythonが有れば何でもできる。
0以上10未満のdouble値の乱数5個標準出力したい
String testid= "ABCD" + ".text";
このABCD.textっていう中身は"テスト"っていう文字列が入ってるとします。
でも、testidの中には”ABCD.text"が設定されるのですが、
どうすれば"テスト"という値が入るのでしょうか。
ABCD.textはtextviewで"テスト"という文字をあらかじめ設定しています。
stringの識別子名を中身に変換したいって?
そんな方法はないです
下記の引数でアクセスすると、上記は期待値が入るのですが、
下記のtestidを指定するとおもった結果となりません。
しかし、ABCD.textといった風に直接指定するのではなく変数か何かで間接的に指定したいと思っております。
関数(ABCD.text);
関数(testid);
>>188
テキストボックスを変数みたいに扱いたいって言ってるのか? c#だとポインタなくなったから
んなことできないんだよね
何言ってるのかさっぱり分からんw
ABCD.textって何ぞねw
>>192
多分テキストボックスのtextプロパティ ABCDというidが付けられたTextView(Xamarin/Androidのlabel)
のtextプロパティに"テスト"という文字列が設定されている
これを何らかの方法で文字列で指定して取りたい
>>193
なるほどww
言語能力とプログラミング能力に関連があるって考えに俺は懐疑的だったけど
やっぱり関係が深いのかもしれないねw >>186
"ABCD" + ".text"してるなら
testidの中身はやはり "ABCD.text"です
ただの文字列です
それが勝手に”テスト”になってたら怖いし不便です
プログラムしてて予測がつきませんので"ABCD.text"のままでいるほうが安心です
"ABCD.text"からABCD.textにできる言語もありますが
C#は基本的にそういうのはやらない方向でプログラムするべきです 全然推測できんw
まさかこう言う事?
string testid= ABCD.text;
>>188
変数に入れたいならtextview型の変数を作っておいてそこに入れよう
textview target = ABCD;
関数(target.text); ?
string testid = File.ReadLines("ABCD.text");
????
>>186
String testid= "ABCD" + ".text";
じゃなくて
String testid=ABCD.text; 脳のテストみたいだな
理解できるものだけ理解してる
出来ない人は変なレスしてる
初心者がやりたがることとしては定番だろう
そんなに意外性はない
>>185
var rand = new Random();
for (var i = 0; i < 5; i++) Console.WriteLine(rand.NextDouble() * 10.0); Controls.OfType<TextBox>().First(c => c.Name == "ABCD").Text
parallelの中で更にparallelするとどうなりますか?
プリミティブな配列
例えばstring[]とかってシリアライズ出来ましたっけ?
どんなシリアライザ使うのかもわからんのに答えようがないが
まあそれをシリアライズできないシリアライザはまずないだろうな
>>188
致命的に説明が下手か何も理解してないかのどっちかだと思う
下手に一般化するより今書いてるコードにコメント書いてそのまま晒した方がマシ asynctaskの中でhttpによるデータ取得して取得したデータを戻り値で返す処理を作成しました。
同時にexceptionによる詳細なエラー内容も戻り値として返したいのですが、どのようにすればよいでしょうか?
戻り値が2つできないので困っております。又、戻り値の型は違います。
>>220
その2つをプロパティとして持つ型をつくる >>220
戻り値二種のValueTuple返せば良いんじゃないの >>222
WebAPIっぽいし、Tupleだとシリアライズした時にItem1、Item2ってなっちゃわない? >>220
エラーオブジェクトに応答とその他情報突っ込んでthrow >>220
こんな型でも返しますかw
public class FunctionResult<T>
{
public FunctionResult(T val)
{
Value = val;
}
public FunctionResult(Exception ex)
{
Exception = ex;
}
public bool HasValue
{
get { return Exception != null; }
}
private T _Value;
public T Value
{
get
{
if (!HasValue) throw new InvalidOperationException();
return _Value;
}
private set { _Value = value; }
}
public Exception Exception { get; private set; }
} >>220
>同時にexceptionによる詳細なエラー内容も戻り値として返したいのですが
例外throwすれば良いだけでは? 正常時は別の戻り値、異常時はthrow?で戻り値の型に合った内容が、
格納されるのでしょうか。
呼び出し元で、どのように取り出せばよいのでしょうか。
関数内で例外をキャッチして新しくException オブジェクト作ってそのInner
Exception にキャッチした例外オブジェクトを突っ込んで作った例外オブジェクトのDataプロパティに返したたいデータ突っ込む
それをthrowして呼び出し元でキャッチしてDataプロパティから取り出す
>>233
新しくExceptionオブジェクト作るなアホか 皆さまありがとうございます。いまださっぱりわからないので出直してきます。。
ありがとうございました。
try catchでcatchのとこにエラー情報が入る?まではわかったきがするのですが、
再スローとかInnerExceptionになるとさっぱりでした。
下位の呼び出し先のエラー情報を上位の呼び出し元にthrowすれば戻り値関係なく渡せるといった感じなのでしょうか。。
サイトみててもそうはどうやってもみえなかったのです。
>>233
意図的にExceptionのインスタンスを作ってスローするのは間違い
SystemExceptionやNullReferenceException、IndexOutOfRangeExceptionも同様 悪口言うつもりはないけど例外の使い方も知らないのに非同期に手を出すとか
順番がおかしいと思うw
>>236
そんなのケースバイケースでしょう。
一概に間違いだとする理由がない。
そういうのを教条主義という >>238
Microsoft自身がやめろって言ってんのに、わざわざそれに反することをするのはアホ >>238
c#の例外について少しでもかじったことがあるのならば、アンチパターンだと知ってるはず >>239
そんなこと言ってる?
言うわけないと思うが仮にそうでも合理性がなければ従う理由もない。
「なぜ」を問わずに盲従する奴こそアホだ >>236
どういうこと?
Exception派生クラスの中から適切なものを選ぶってこと?
それともキャッチした例外オブジェクトにデータを付加するの? >>241
なぜ言うわけ無いと思ったのか説明してごらん >>243
そんなことどこにも書いてないどころか>>233と同じことをやってる例が出てるけどw
本当にちゃんと読んだ?w >>245
ちゃんと読めよカスwww
>自作のソース コードからは、意図的に System.Exception、System.SystemException、System.NullReferenceException、または System.IndexOutOfRangeException をスローしないでください。 >>246
日本語のドキュメントなのに読めないとか >>247
言っちゃわるいけど、君の読解力がおかしいことはよくわかった。
その一文のどこをどう呼んでもキャッチした例外をInnerExceptionに入れて
別の例外を投げてはいけない、などという意味には読めません >>250
読解力がないのはお前。否定してるのはExceptionクラスのインスタンスをnewしていること。 しかし、
>自作のソース コードからは、意図的に System.Exception、System.SystemException、System.NullReferenceException、または System.IndexOutOfRangeException をスローしないでください。
これ、前者2つがダメな理由は分かるけど後者2つはかなり意味不明だね。
翻訳ミスを疑ったけど英語でもそうなってる。
これはさすがに盲従する奴はアホだと思う
>>251
普通に読めば>>233に出てくるExceptionとは限定的にExceptionクラスだけを
指しているとは読めない >>254
あんな質問してくる初心者に「新しくExceptionオブジェクト作って」と言えば、「new Exception()」するだろうよ
ところで、>>253を少しは読んだのかい? >>253
なるほど、NullReferenceExceptionの方は一応回答者が理由出してるけど
もっと明示的な例外の方が良いから使うなというには弱いように感じるね。
IndexOutOfRangeException の方は使っちゃダメな理由出てないね >>255
それ、じゃあ自分なら何て表現するか考えてから言ってる? >>257
「よっしゃ、今日はこのぐらいにしといたるわ」 by 池乃めだか >>263
君、そういうくだらないレスしかできない自分が嫌にならないの?
絵に描いたような「精神勝利法」だけど、そんなので勝った気になれるって小学生かよ。
俺ならプライドがあるからやらないけど、きっと傷つくような自尊心なんて最初から持ってないんだね >>264
久々にみた気持ちの良いブーメラン
親切に教えてもらっても意固地になる人って職場にも一人はいるよね 例外処理が難しすぎるのか例外処理を分かってないヤツが多すぎる。
Go言語が例外処理を言語仕様からはずしたのも納得できるな。
>>237
非同期とか使わないでも実装出来るものを非同期にするとか
ロックの仕組みも分かってないのにスレッド使うとか
スキルの無いヤツほど難しい事をやりたがるwww プロパティだけのデータストア用インナークラスを作ってるんですけど、クラスの修飾子をprotectedにして中のプロパティをpudlicにしています
メンバの方がアクセス権が広い事に違和感を感じるのですが世間様ではある事なのでしょうか
>>269
クラスがprivateの場合はメンバの方を広くするしかないんだからそれ自体はおかしくない
クラスがinternalでメンバがpublicというのはよくある
でもprotectedな内部クラスというのはそもそもあまり一般的ではないと思う
クラスの外にその内部クラスを使うユーティリティを定義したくなったらどうする?
紛らわしくて不便なだけで特にメリットがない 補足
(派生クラスを作ろうとした人が)クラスの外にその内部クラスを使うユーティリティを定義したくなったらどうする?
という意味な
>>271
おそらく、HttpClientを使ってるんだろうけど
async/awaitの例外処理には罠がありそうなので
グーグル先生にお伺いをして慎重に例外処理を使う。 >>220
HaskellのEither辺りを自分で実装w
探せば出てくるが
今時例外はあまり使わんね
時と場合によるが >>276
サーバーに接続出来なかったらどうする? >>278
レフトとか知らないけど例外でよくね?例外がダメ理由は? >>280
呼び出し関数内で何かしらのデータを作ったとしてそれはどうやって呼び出し元に伝達する? >>284
例外で帰ってくるやつか?
そらなら呼び出し元でcatchだね 例外処理は汚くなるからイベントハンドラとかみたいな呼び出し階層の最上位にだけに集約させたいってこと?
>>286
汚くさせないためにあるのが例外処理だろ?
例外を放置すりゃ呼び出し最上位まで飛んでいくが。 存在しないリソースを要求するだけで例外を引き起こせるなら。
>>233が
Exception派生オブジェクト
って書いとけばそれで済んだ話だと思うんだが
よくもりあがってるな >>290
それもそうだし、あまりのドキュメントを読む能力の無さに吹いたわ 例外の内容を戻り値で返そうとしていた時点で察するべき
今月ずっとhResult == IntPtr.Zeroとかresult != 0とか書いてた俺から見れば
例外なんて天国じゃないですか
>>293
その天使を握り潰してリターンで返してエラーハンドリング地獄にしようとしていたのさ。 でもファイルが開けないで例外は困る
他のも完全に例外とそうでないのと作った奴との波長が合わないと
仕分けが面倒臭い
いっそ握り潰すは結構わかる
なんかいい手はるのか?
開けないという結果を返したいなら戻り値で返せばいいじゃん
例外の詳細が欲しいとか言うなら例外のまま戻ればいいってなる
>>295
開けないファイルを処理できる場所で例外のキャッチをすれば良いだけだが。 >>297
だから一生懸命例外を仕分けするって話だろ >>299
だから他の奴の作ったクラスの例外にする挙動で気にいらない例外を仕分けする必要があるじゃん
アスペ過ぎるだろお前 MSの推奨するasync越しの例外処理はCancellationTokenSource使うやつだろうが可也面倒だわな
キャンセルの仕組みを入れるなら、次いでに仕込んでもいいと思うが
>>300
例外の大半は致命的なエラーだろ
メッセージ吐いて落とすだけ
仕分けも糞もないわ >>299
うんちっちException
うんこっこException
うんこっここっこException
ちんぽっぽException
ちんぽっぽちんぽException
ちんちんException
まんこっこException
まんこっこっこException
それぞれ挙動を変えたい >>302
なんでファイルオープンミスったぐらいで致命的なエラーなんだよ
別ファイル指定させろ殺すぞ >>304
キャッチしてリカバリ処理しても良いんだよベイベ >>303
まんこっこExceptionだけキャッチして
あとはゲロ吐きへ 致命的エラーの大半はバグだから、しっかりロガーに記憶センといかんよな
>>308
そんなの組んだやつ次第じゃん
テメーのディスプレイに写った顔がキモメンなので例外 ところでCsvHelperのCurrentRecord消えてんじゃん
たかがCsvでマッピングなんかしねーよ
コイツ馬鹿じゃん
やっぱり他人の作ったもんなんかゴミだな
この程度は自分で作るべきだった
戻り値のあるメソッドでcatchにもreturn入れないとエラーになるんだけど、普通、例外拾った場合、returnにはnullとかいれるの?
>>314
エラーで戻り値をセット出来ない場合は、
メソッドの中でcatchしないで呼び出し元でcatchする。 >>315
なるほど、メソッドの外でcatchするんですね。それが定石なんでしょうか? >>316
メソッドの中でcatchして例外に対する処理が出来れば、そこでcatchすれば良いし、出来なきゃ呼び出し元でcatchする。呼び出し元で処理出来なけりゃ更に上位の呼び出し元でcatchする。
基本は例外は例外なのでそんなことが起きないようにコーディングする。 WebにあるMSDNの説明を和文で見る人は、「.NET Framework(current version)」を「.NET Framework 4」に変更して、みたほうが良いかもね。
それでも変な和訳だけど。
>>314
それ、問題設定がおかしい(きつい言い方だけどそれは愚問)だから、
たぶん例外の意味が根本的に分かってないんだと思う。
まず「そもそも例外って何?」ってところからちゃんと理解した方がいいと思う。
理解をパスして定石だかお作法だかを覚えることで乗り切ろうとする態度は危険
それと
>戻り値のあるメソッドでcatchにもreturn入れないとエラーになる
間違ってる。
コンパイル通らないのは値を返さない実行パスが存在する場合だけ >>319
例外処理を理解してないやつってホント多いよ。
c#何年もやってて理解してなとか普通に居るし。 >>279
ダメでは無いが例外の欠点
上下のやり取りにもあるように例外は扱いが難しく暗黙知が多い
(個人的には難しいとは思わんが)
簡単に握り潰せる
その関数が例外を出すかどうかはパッと見には解らない
非同期の時どうなるか直感的ではない
今はビジネスロジックのエラーに例外はあんまり使わない
もちろんケースバイケース >>270
インナークラスってそれを持ってるクラスで隠蔽したいからあるものじゃ無いんですか?
知っているだけで用法を知らない事を痛感しました ドキュメント書かない奴に限って
ちんぽっぽちんちんException
の亜種をたくさん作るんだw
ところで
CsvHelper
GetRecords<dynamic>()で動くだろ死ねよ
って温かいレスをもらったが
Csvの読み込み程度でこんな翻弄されてるなら
やっぱり自分で作った方が安泰かな?
NuGet最新取ると概ね動かないぜ
>>322
Go言語が例外処理を無くしたのは、
・例外処理を正しく扱えないヤツが余りにも多すぎる
・例外処理は並行処理では扱い辛い
後者の方が無くした主な理由だろうけど
例外処理分かってないヤツ多すぎるwww >>324
ソースがあるのだし自分でソースくらい見ろよ
オープンソースでドキュメント期待する方が間違ってるぞwww >>328
俺に聞くなボケw
個人的には難しいとは思わんが
とわざわざ書いたのにそれが目に入らぬか ?? Listのaddメソッドって例外飛ばさないんですか?
もう追加できないよ!みたいな感じで
{〇,✕,✕,〇,△,△,△,〇,△}みたいなリストを{〇,✕,✕,}{〇,△,△,△,}{〇,△}って感じに分けたいんだけどLinqで簡単に出来ないかな?
ループさせんのが面倒で
>>318
英文表示にして段落毎にグーグル先生に翻訳して貰うと割と読める文章になることが多い。
グーグル翻訳でもサイト翻訳は翻訳精度が悪い。 >>329
どこがみんなにとって難しいと思うから322で難しいとか書いたの? 例外を変なところでキャッチしちゃう人が多い
メソッドAの中でメソッドBを呼んでまたメソッドCを呼んだとする
メソッドC中で例外が起こってもメソッドC内でキャッチしちゃって
メソッドCの戻り値をnullでリターンして
メソッドBで戻り値のnullチェックしてnullだったらまた戻り値をnullでリターンして
またメソッドAでチェックしてみたいな馬鹿な使い方をしてる
メソッドAでキャッチしろって思う
例外を目の前でキャッチするくらいなら他の制御構文でヤレ
>>337
ホントそれ。
至る所にtry/catchがある。
try/finallyは多用するがtry/cathなんて滅多に使う事はない。
例外処理は至る所に例外処理コードを書かないために存在する。 >>341
だから何度も書いてやってんじゃん
仕分けが絶望的に面倒臭ぇから握り潰しちまうって
だってさよく考えろよ
ドキュメント化されてないメソッドが出す例外って全部でいくつかどうやって調査する? 仕分けめんどくさいのは同意するけど、握りつぶすのはどうなんだ
仕分けした結果握りつぶして問題ないって判断したものならいいかもしれんが
極論として、全部握りつぶす or 全部スルーして上位にキャッチさせる
どっち選ぶ?
>>342
↑
例外処理を誤解している典型例です。
皆さん絶対に真似しないように。 >>337
>例外を変なところでキャッチしちゃう人が多い
かと思えば、例外が必要なところでtry/catch { } で握りぶしちゃう人も多い
これも追加ね。
無駄なtry/cathと握りつぶし
例外が分かってないヤツの典型例 分かったからママに教えてやれ
お前が可愛いなら誉めてくれるだろう
>>346
だから例外で帰られちゃ困るのよ
ちゃんと仕様で動作が決まってるのにもかかわらずそのメソッド的には例外なの 例外を拾ってエラーチェックをしようとしているのが根本的な間違いだな。
あからさまに変な人は相手にしないほうがいいよ
俺も言ってる意味がわからない
>>348
戻り値だったらいいの?例外となんか違うか? >>355
お前、なんの例外がくるのか全部把握してる前提で話してるだろ? 把握できてる(かつ握っても問題ない)例外だけ握ればいいんじゃないの?
なんで全部握りつぶすの?
>>358
何処で発生するか、しかも例外の内容も分からない例外を仕分けして何をしたいんだ? >>356
お前なんの戻り値がくるのか全部把握してる前提で話してるだろ? >>359
だから失敗でアプリ落としたくねーんだよ
アスペか
んで全ての例外に対応したいがメソッドの中身を読むも広大過ぎてなんの例外がくるのかわからない
ときたら握り潰すしかないよね >>361
それはダメなやり方だよ
例外をキャッチしきれなければアプリを落とすべきなんだよ
それが基本なんだよ
特殊な場合は別だけど普通はそう教わる >>361
だったら、例外をcatchして例外メッセージをMessageBox.Show()しとけば良いだけだろ。 こんな深夜に要件定義されていない議論するとか正気か?
>>363
>例外をキャッチしきれなければアプリを落とすべきなんだよ
どんな例外もキャッチしなきゃダメだろ。
キャッチして「駄目だコリャ」の場合はログ吐いて落とすしかない。 Windowsの場合、ハンドルされない例外で落としておけば、ユーザーには後日解決策が
提示される場合があると表示されて、パートナーには統計情報が連絡される。
動いてそうだけど動いてないかもしれない、エラーが中で出てるけど見えないプログラムなんて、
ブレーキランプはつくけどホントにブレーキがかかるかわからない車みたい。
いっそ走らないほうがマシ。
>>369
MS以外に例外情報を送信することができるのか? >>368
キャッチして何になるんだよ?
アプリは予測してない状況になってるんだぞ
予測できてないから復旧もできないし
誤動作してシステム食いつぶすこともあるんだから生かしておく意味はありません
そういうことしてDBに特定のデータだけ一晩中書き続けた例を知ってる >>367
むしろ例外の仕組みがない言語の方がプログラマーに制御できないとこで勝手に落ちるんじゃないの? >>369
ダイアログ出てる間はプロセス掴んだままになるから、
素直にプロセス落として自動的に再起動させたい場合には邪魔になるやつね。 ロガークラスなんかだと
中で例外全部握り潰すけど
catch {}
>>374
だから、ログ吐いて落とすって書いてあるだろ。
殆どの場合、例外を拾ったら落とすしかない。 ダメだこいつら
話になんねー
あるべき論はいいからさっさとアプリ動かせよ
握りつぶして動くなら動くでいいだろ
メソッドの中身なんて3万行だか4万行だか読んでらんねんだよバカが
その全てでテキトーに例外発生させてんだから握りつぶしてナンボだろこんなの
Office系は印刷中キャンセルボタン押しただけで
COMException投げてきたりするから
とりあえず握り潰すようにしている
>>380
じゃ、メッソッドの呼び出しもと全部にcatch {}入れとけよ。 例外で落としたくないプログラムってのはたしかに存在するけど
基本そんなプログラムをC#で書くのが間違ってると思うわ
例外処理のっていうときに、C#での(あるいは.NETでの)例外処理は、って言うようにしようぜ
つかまあこの話もう終わりで良いけど
>>337
そのメソッドAが戻り値あり立った場合は?さらに外?それともヌル返す? 長々と無意味なレスバが続いてたけど、ひとつだけ皆が同意できそうなのは
例外がどういう用途で使われるべきかの一般的なコンセンサスに従う人は
ID:D89+JmTA0 = ID:pJdoypJN0 と一緒に仕事したくない、という点だけだな
異常は戻り値で知らせるなって言いたいんじゃないの。
まあそりゃそうだよねって言う。
勘違いする人がいると見てられないので一応書いとくけど、
例外の目的の一つはフェイルセーフ、つまりプログラマの想定外のことが起こった時に
「安全側に倒す」 = 「プログラムを強制終了させる」ことなので、
「プログラマの想定外のことが起こってもプログラムの実行が止まらないようにしたい」
などという馬鹿なことを考えてはいけない。
>>391
はぁ?
他の誰かのライブラリを使ったときに
使用者の想定内がライブラリ作成者の想定外のときなんて簡単に発生すんだろーがバーカ
テメーはちんちんでも弄ってろ >>331
誰もみてないだろうけど多分解決したっぽいので質問取り下げます
ほんとlinqって便利だな >>395
会社の
お前のレス
ガイジ過ぎるだろ
ちょっと考えてからレスしたら >>399
お前、単発だけど
連結するとガイジなんだろ?w >>397
やりたいのは文字列じゃないけどこんな感じのイメージ
パフォーマンスはしらない
var list = new List<string>() { "○", "×", "×", "×" , "○", "△", "△", "○", "△" };
Func<string, bool> isFirst = (item) => item == "○";
int groupingId = 0;
var result = list.Select(item =>{
if (isFirst(item)) { groupingId++; }
return new { Id = groupingId, Value = item };
})
.GroupBy(pair => pair.Id, pair => pair.Value);
// { "○", "×", "×", "×"}{"○", "△", "△"}{"○", "△" }
List<List<string>> hoge = result.Select(group => group.ToList()).ToList(); >>401
畳み込みですやってみた。
var list = new List<string>() { "○", "×", "×", "×", "○", "△", "△", "○", "△" };
var isFirst = new Func<string, bool>((item) => item == "○");
var result = list.Aggregate(new List<List<string>>(), (prevList, item) =>
{
if (isFirst(item))
prevList.Add(new List<string>() { item });
else
prevList.Last().Add(item);
return prevList;
});
// resultからhogeにクローン
var hoge = (List<List<string>>)result.Select(group => (List<string>)group.Select(item => item)); こっちの方がいいか。
var list = new List<string>() { "○", "×", "×", "×", "○", "△", "△", "○", "△" };
var isFirst = new Func<string, bool>((item) => item == "○");
var hoge = list.Aggregate(new List<List<string>>(), (prevList, item) =>
{
if (isFirst(item)) { prevList.Add(new List<string>() };
prevList.Last().Add(item);
return prevList;
});
if (isFirst(item)) { prevList.Add(new List<string>() };
括弧ミスった
Func<T,bool> を受け取るSplit関数定義した方が後で楽じゃね?
確かにその方がスッキリするな。
いずれにしろsplitの中身を定義しないといけないけど
>>405
Agreegate余り使ったことなかったけど便利だな
こっちの方が綺麗だ
if (isFirst(item) ||prevList.Count>0)
書いてなかったけど、リストの先頭が〇とは限らないのでこんな感じで Aggregateは宣言的でないので関数型に慣れたらむしろ読み辛く感じるようになる
考え方が実質的に手続き型だから、手続き型に慣れてる人には馴染みやすいので濫用されてしまいやすい
関数型の典型的な関数みたいにバッ、バッって感じじゃなくてズィーンて感じだからか。
>>401のやり方だと使ってる関数はバッバだけ感じかもしれないけど外部変数使ってるから内外に絡み合ってるのがあれだけどどうすればいいんだろう Select/Aggregateなんて変な書き方せず素直にmap/reduceでいいのにな
SQLっぽくというコンセプトで台無しになってる感じ
ズィーン→ズインッ→ズィッ→バッ
こう見れば畳み込みも関数型に馴染む
>>412
まあこの場合ではSQLを扱ってるわけじゃないしな 関数にした方が見やすいじゃん
無駄に不具合出して喜ぶ低能過ぎる
確かに目新しさにおおーってなったけど、これただのforeachでいいな
やっぱシンプルにループさせるのが最強か
var result = new List<List<string>>();
list.ForEach(item => {
if (isFirst(item) || list.Count <= 0){
result.Add(new List<string>());
}
result.Last().Add(item);
});
var sep = list.Select((x, i) => new {x, i})
.Where(xi => xi.x == '○')
.Select(xi => new[] {'○'}.Concat(
list.Skip(xi.i + 1).TakeWhile(x => x != '○')));
こうかな
関数作った方がいいのは同意する
上のお題、結果がIEnumerable<IEnumerable<string>>でいいなら、
var list = new List<string>() { "○", "×", "×", "×", "○", "△", "△", "○", "△" };
var index = 0;
var hoge = list.GroupBy(x => x == "○" ? ++index : index);
ではだめ?
>>416
それ意味的にはaggregateと全く変わらない
初期値が外にあるか引数のところにあるかしか違いない >>417
それaggregateより読みやすいと思うか? >>422
変換しろよ
その分だけコード長くなるぞ >>423
何に変換するの?
元々の質問には最終的に欲しい型の指定はない
単に列挙できれば良いならIEnumerable<IEnumerable<string>>として扱えれば十分 いつも思うんだが、この手のやつをLINQでやりたがるやつって何が目的なんだろ
自分ですらすらと書けるならLINQでいいけど、そうじゃないなら勉強以上の意味があるとは思えん
個人的にはシンプルさを競うなら>>418がいいと思う
戻りの型が気に食わないなら
.Select(t => t.ToList<string>()).ToList<List<string>>();
あたり追加すればいいだろ こんなのやっててきったねーコード書く癖がついたら嫌だなw
お前らが思ってる程きれいでもきたなくもないから安心しろ
>>425
変数や関数を定義するのにいちいち名前をつけるのが面倒だからよく使う
無名だらけ >>418
Selectなくても大丈夫だったか
hogeのGetEnumeratorが呼ばれる度にindexが増えていくのが気になるけど
戻り値はIEnumerableでもIGroupingどっちでもいいけどkeyは隠すかも
もし必要になったら以下のメソッドを作って、foreachと速度比較してって採用するかどうかって感じかな
色々と参考になった
public static IEnumerable<IEnumerable<string> Split<T>(IEnumerable<T> source, Func<T, bool> predicate){
var index = 0;
return source.GroupBy(x => predicate(x) ? ++index : index);
} 俺嫌われすぎだろ
アスペルガー症候群だから仕方ないのか
linqより何でもListにしないと心休まらない兄貴の方が重症かもな
linqだからで許されてるクソコード延々貼り付けたガイジはさっさと死ねよ
LINQが良いか悪いかは別にしてLINQを必要以上に毛嫌いする奴って頭悪いだけだろ。
>>439
今回のは普通に書いた方が綺麗だったよね? ここ数日の有り様は何なんだろう
C#養護学校の卒業式でもあったのかね
必要以上にってのが言いたかった。
実用性は別としてリスト操作系関数でスラスラ書ける奴にコンプでもあるのかって思っちゃう
>>443
え?
そんなの気にしたことないや
プログラムなんて組めるようになったらそこでスキルレベルマックスだろ あとは
設計書記述スキルを上げるか
見積り書記述スキルを上げるか
議事録作成スキルを上げるか
した方がナンボか実りがあるよ
>>440
レスいくつも書き込むくらいならそのコード提示したらいいのに >>447
別に俺そここだわらんよ
興味ねーし
お前にも 興味ねーならゴミだのクソだのほざいてんじゃねーよw
>>449
クソコードを嬉々として貼られるのは見逃せないな
荒らしと変わんねーし どれだけ偉そうな主張があるのかと思えば
貼ってあるのはクソコードばかり
linq貼ってるやつ目障りだから死ねよ
普通に組んだ方が綺麗なコードなら持ってくんなよ
だっせ
おまえの価値基準で判断すんなw
コンプ感じてるだけw
これ以上はLINQスレでやれと言おうとしたらもう落ちているのね
>>452
いいじゃん
便所の落書きなんだし
俺が書くスペースもあんだろ
誰でもかける処理わざわざ複雑にして
悦にいってるマヌケなPGみて
安心感を得られるセラピー効果もある どっちかっていうとアプリを作れないアホだな
まあ、コードで何か主張したいならGitHubでもやればいいのに
こんな便所でしか主張できないなら
クズどものlinqライフもここでしめーだろ
ウハwwwwww
書けない奴が批判の図wwww
権利すらなしwwwwwww
>>458
クソコード貼っていい気になってるの?
アドバイスしてあげるけど
滅茶苦茶レベル低いよ stringは参照型だから既定値はnullということで合ってるよね?
>>466
既定値はnullだけどstringはイミュータブル型 >>466
stringは参照型で規定値はnull WPFじゃなくてWindowsForms内で簡単な3D描画したいんですが
どういう風がいいでしょうか。
とりあえず箱を線で描くだけなんですが。
・DrawLineみたいなので始点終点を3次元(X,Y,Z)で指定し描画
・視点の位置(X,Y,Z)と向きを指定して表示
って風な感じが希望なんですが・・・・
DrawLine の Point型 って X,Y しかないじゃないですか。
X,Y,Z で指定できる DrawLine がないのかと
カメラ固定でいいんだろ?
ZがXYのどこになるかは簡単な計算で出せる
紙に気に入った角度の3軸を書いて見ればいい
>>471
カメラの視線方向をZ軸、カメラから1000mm先のカメラの視線に垂直な平面上の1000mmの
線分がモニター上に1000mmで表示されるモデルを採用、3D、2Dともに同じ単位系(例えばmm)
を使用する条件なら、3D空間上の点(X, Y, Z)を2D上の点(x, y)に写像するには、
(x, y) = (X/Z, Y/Z)
でいいと思う。知らんけど
2DグラフィックのY軸が下向きなのを考慮するならyはもちろん-1倍する 描画面の中心を原点にする変換も必要かw
こっちはGraphicsの組み込みの機能でできるけど
そんな面倒なことしなくても
カメラ固定ならXYに足すだけでいいじゃん
Zが1ならXYに0.5ずつ足すみたいのでいいよ
Zが2ならXYに1ずつ足す
Zが3ならXYに1.5ずつ足す
みたいな
>>469
URLが何故か張れないんだが
C#3D立方体ワイヤーフレーム (第1回) for VS2013 Express
でググって見つかるところが参考になる
ライブラリを期待しているのならC++で探すしかないだろうな
DLLになっていればC#からでも使えるから いくらなんでもopenGLライブラリはwinforms用ぐらいあると思う
windows forms openglでググれ
時間, 名前, テスト回数
2017/1/1, A氏, 3
2017/1/1, A氏, 4
2017/1/1, B氏, 1
2017/1/1, B氏, 2
2017/2/1, A氏, 1
2017/2/1, A氏, 2
2017/2/1, B氏, 1
2017/2/1, B氏, 2
2017/3/1, A氏, 1
2017/3/1, A氏, 2
2017/3/1, A氏, 3
↑のようなデータがある場合
↓のように名前ごとに最新の時間のデータを取得したい。
2017/3/1, A氏, 1
2017/3/1, A氏, 2
2017/3/1, A氏, 3
2017/2/1, B氏, 1
2017/2/1, B氏, 2
>>482
↓のような感じで取れるとは思いますが
実際のデータでは時間も名前も複数あるのでLINQで一発で取れる書き方はないでしょうか?
public class Test
{
public DateTime 時間 { get; set; }
public string 名前 { get; set; }
public int テスト回数 { get; set; }
}
List<Test> ListTest = new ListTest ();
var List1 = ListTest.Where(x=>x.名前 == "A氏" & x.時間 = 2017/3/1).ToList();
var List2 = ListTest.Where(x=>x.名前 == "B氏" & x.時間 = 2017/2/1).ToList();
List3.add(List1);
List3.add(List2); そんなこといわずに優しいレスくれよ
友の会ってどこなの?
list.GroupBy(item=>item.名前).Select(group=>group.Max(item=>item.日時.Ticks)).ToList<Test>()
>>487
レスありがとうございます。
Ticks使ったことないので参考になりました。
ありがとうございます。 ListTest.GroupBy(item => item.名前).Select(group => group.Aggregate((max, item) => item.時間 > max.時間 ? item : max)).ToList()
DateTimeオブジェクトはそれ自体に大小関係演算子使えるしな
並びの下の方が同じ日付でも最新なの?
まあ、そういうデータよくあるけど
SQLだとドヤ顔でExistsしてるブログがたくさん出るやつだな
下のやつを最新にしたいなら>=にすればいいのかな
順番通りの保障ないかもしれないけど
ienumerbleだからだめか
最初の段階でインデックスとペアにするとか
これだけで各々の最新のデータが取れるはず。
ListTest.GroupBy(item => item.名前).Select(group => group.OrderBy(item => item.時間).Last()).ToList()
・GroupBy
Elements in a grouping are yielded in the order that the elements that produced them appear in source.
https://msdn.microsoft.com/ja-jp/library/bb534304(v=vs.110).aspx
・OrderBy
キーに従って昇順のシーケンスの要素を並べ替えます。
このメソッドは、安定した並べ替えを実行します。つまり、2 つの要素のキーが等しい場合は、要素の順序が保持されます。
https://msdn.microsoft.com/ja-jp/library/bb534966(v=vs.110).aspx
元データの並び順で下にあるほうのが優先されてるのをはっきりとわかるように書きたかったらかなり長いけどこうかな?w
ListTest.Select((item, index) => { Item = item, Index = index } ).GroupBy(pair => pair.Item.名前).Select(group => group.GroupBy(pair => pair.Item.時間).OrderBy(innerGroup => innerGroup.Key).Last().OrderBy(pair => pair.Index).Last().Item) LINQ使わなかったらこうか?
int indexOfSame名前(Test item, List<Test> list)
{
for(var i=0;list.Count;i++)
if(list[i].名前==item.名前){
foundIndex=i;
return i;
}
}
return -1;
}
List<Test> extractLatestData(List<Test> list)
{
var result=new List<Test>();
foreach(var item in list){
var foundIndex=indexOfSame名前(item, result);
if(foundIndex>=0){
if(item.時間>=result[foundIndex].時間){
result[foundIndex]=item;
}
}else{
result.Add(item);
}
}
return result;
}
var result= extractLatestData(ListTest);
LINQ使えばこう?
var result=ListTest.GroupBy(item => item.名前).Select(group => group.OrderBy(item => item.時間).Last()).ToList();
横に長くて拒否反応出るのも解らないでは無いんだが
読む時は愚直に左から読んでいくだけだし、PowerShell使ってると日常茶飯事だしな……
>>504
じゃあ、全コード一行でいいじゃん
左から読んでいくだけだろ? foreach~~
result.Add(latestDataOf(リスト, 名前))
とかのほうがいい?
これだとおかしいか
foreachであらかじめリストから抽出しておいた名前の種類の一覧とかを与えないとあれか
最新取る頻度が高いなら最新テーブルと履歴テーブルを分けてほしい
みんなって推敲してるの?
真面目だな
俺もこれからはそうするかもしれん
真面目に考えるとデータベースに更新分Insertしてからあらかじめ作ってあるビューをSelectするだけ
GroupBYや集計はDBでやった方が楽だしこっちでは表示件数や順序くらいしかいじらない
データベースといってもローカル鯖や組み込みもある、適材適所
sources
.GroupBy(s => new { 名前, テスト回数 })
.Select(g => new {
g.Key.名前,
g.Key.テスト回数,
時間 = g.Max(s => s.時間)
});
悩むところねえなぁ
ListTest.GroupBy(item => item.名前).Select(group => group.OrderBy(item => item.時間).Last()).ToList()
ワシのが1番じゃろ。
よくみたら仕様ちゃうやん自分…
src.GroupBy(s => s.名前)
.SelectMany(g => g.Where(t => t.時間 == g.Max(u => u.時間));
これが王道の正解な
こっちのが速いかな
sec.ToLookup(s => s.名前)
.Select(g => new { g, m = g.Max(t => t.時間)
.SelectMany(p => p.g.Where(u => u.時間 == p.m);
そういやラムダ式の中の命名は超シンプルでいいんだったな。
>>518 最大値を探すためにループ、その値を持ち主をまた探すためにループってなんかキモくね?それが王道なのか。 >>482
まず時間と名前でグループ化
時間, 名前, テスト回数
2017/1/1, A氏, 3,4
2017/1/1, B氏, 1,2
2017/2/1, A氏, 1,2
2017/2/1, B氏, 1,2
2017/3/1, A氏, 1,2,3
あとは日付けでソートして名前でDistinctするかな >>520
ループ?
SelectManyはSQLで言えば結合みたいなもの
LinqのJoinだとこんな感じかな
src.GroupBy(s => s.名前)
.Join(src,
g => new { 名前 = g.Key, 時間 = g.Max(t => t.時間) },
u => new { u.名前, u.時間 },
(g, u) => u);
SelectManyの方がわかりやすいな Maxを探すためにループ、その持ち主また探すためにWhereでループ
max ← 持ち主
こういう方向のリンクなら、max を探してから、持ち主も探さなきゃいけないけど、
逆方向のリンクなら、すぐ
名前、日付で降順ソートして名前ごとの最新取るだけでなげーな
>>525
それ結局最後まで舐めないと全ての名前が分からないから何の意味もないぞ LINQって実は裏側でforeachで回してるってホント?
例えば、100個の中から、1個を探すのは、全(線形)探索 O(n) しかできない
全データにインデックス・ハッシュがついていれば、O(1)だが、
ソートするには、全探索する必要がある
DB みたいに、B-tree でソートされているのなら、O(log n)
「アルゴリズムと計算量」を勉強して
>>529
すればいいじゃん
何がしたいの?
速度アップしたいの? こんなにレスが付いてるとは思わなかった。
無事満足いく結果がとれるようになりました。
試したことないのもあって勉強になりましたありがとうございます。
>>527
記述によっては複数回どころか毎回ループもあり得るから注意な foreach版も作ったけど
一回回すだけで辞書はできるので計算量は減るし再利用にも便利
DBに接続して操作するクラスを作ってるのですが、コンストラクタでDBに接続してデストラクタとDisposeで切断処理を書こうと思っています
基本的にはこのような書き方でいいのでしょうか?
各処理のメソッドで接続切断を仕込むのもあると思うのですが連続で処理する場合たとパフォーマンスの低下に繋がると思ったので気になりました
これEXISTS使うSQLの定番問題なんでその定番SQLが生成されるようにAnyするのが最速
そう、EFならね
>>534
途中でLANケーブル抜いたらどういう動作するの? >>536
DBはローカルなんでそこは考えてませんでした
途中でDBとの接続切れたらエラー返すぐらいしか考えてないですね
そこでクラス抜けるようにするかどうかは分かりませんがデストラクタかdisposeに入ると思います
まだ実装してませんが >>535
接続部分はAnyでまとめた文打ち込む前後だけ開くってことでしょうか? >>539
悪いが俺のレスは質問と関係ないぞ
ちなみに各DBのコネクションクラスは質問通りのIDisposableな自動Close設計で
連続する処理する場合はコネクションを開いたまま使いまわすのが普通
SQLite.NETが参考と言うかやりたいことそのままじゃないか? https://ideone.com/a5csSX
たくさんボタンがあって、ボタンを押すとそれに対応した画像を保存するプログラムなのですが
ひとつのsaveFileDialogを使いまわすにはどうすればいいでしょうか
上のコードのpictureBox_1、pictureBox_2が引数になる様にしたいのですが >>544
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
// 画像保存処理
} >>544
ボタンで分岐ならすぐできる
private void button_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
if (saveFileDialog1.ShowDialog() != DialogResult.OK)) return;
if (sender==button1)
{
pictureBox_1.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Bmp)
}
else if (sender==button2)
{
}
} >>544
ボタン事に対応したピクチャーボックスがあるならTagに設定しておくと便利だよ
button1.Tag=pictureBox_1;ってしといて
((PictureBox)(((Button)sender).Tag)).Imageって感じで画像を取得できる void RegisterClickEvent(Button b, PictureBox p)
{
var d = new SaveFileDialog();
b.Click += (s, e) => {
if (d.ShowDialog() == DialogResult.OK) {
p.Image.Save(d.FileName, ...);
}
}
}
// on load
var pairs = new [] {
new { b = button_1, p = pbox_1 },
new { b = button_2, p = pbox_2 },
...
};
foreach(var pair in pairs)
RegisterClickEvent(pair.b, pair.p);
>>544
まずSaveFileDialogのFileOKイベントを使ってるのがまずいくない?
これだと結局FileOKのイベントハンドラに引き渡すためだけにImageかパスをフィールドに持つ必要が出てくる
private string AskSaveNameFromUser()
{
var sfd = new SaveFileDialog();
sfd.DefaultExt = "bmp";
sfd.Filter = "BMP形式|*.bmp";
if (sfd.ShowDialog(this) == DialogResult.OK)
{
return sfd.FileName;
}
return null;
}
こんな風にユーザーから保存名を貰ってくるメソッドを作った方がいいんじゃない? その上で
private bool TrySaveImage(Image img)
{
var savePath = AskSaveNameFromUser();
if (savePath == null) return false;
try
{
img.Save(savePath, ImageFormat.Bmp);
}
catch (Exception)
{
return false;
}
return true;
}
こんなメソッドを用意すれば、後はラムダ式使ってボタンのclickイベントにこれを紐づけするだけ
button1.Click += (s, e) => TrySaveImage(pictureBox1.Image);
ボタン押した時に保存したいんだからClickイベントハンドラの中に記述すればいいだろ。
フォームで画像を表示したところ、それを閉じなければコンソールに処理が戻らないプログラムになってしまいました
同時に動かす方法があれば教えていただきたいです
>>554
コンソールって何を指しているの?
フォームに画像表示(パネルでもPictureboxでも)して反応が無くなるってことは普通は無い START をコマンド名の前に書いても?
とエスパー回答
>>554
Threadを使おう
var thread = new System.Threading.Thread(
() => {
System.Windows.Forms.Application.Run(form);
});
thread.Start(); 一つのプロセスで複数のUIスレッド作って大丈夫なんだっけ?
すみません、上手く説明できないと思うので一応コードも載せます
やりたいことはコマンドプロンプト上で流れる処理の途中で画像を呼び出すことです
その際、処理が止まってしまいます
var form = new System.Windows.Forms.Form();
var pb = new System.Windows.Forms.PictureBox();
pb.Image = System.Drawing.Image.FromFile(imgpath);
pb.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
form.Controls.Add(pb);
System.Windows.Forms.Application.Run(form);
途中で送信してしまいました・・
頂いた返事から色々と試してみようと思います!
>>560
var form = new System.Windows.Forms.Form();
var pb = new System.Windows.Forms.PictureBox();
pb.Image = System.Drawing.Image.FromFile(imgpath);
pb.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
form.Controls.Add(pb);
var thread = new System.Threading.Thread(
() => {
System.Windows.Forms.Application.Run(form);
});
thread.Start(); >>560
Application.Run(form);で止まるなそれは
フォームのインスタンス作ってShow()できないの? Application.Runをしないとメッセージ来ねえからShowしても一瞬で消えるだろ。
>>562
並列処理で無事起動できました!
イカのような記号が何を意味するか分かりませんが
いい機会なのでスレッドも勉強してみます
>>563
なぜApplication.Run(form)で止まってしまうのでしょうか?
フォームに制御が移ってしまっているということですかね >>560
その部分全部を別クラスにしてインスタンスを作って呼び出せば動いた
実際に呼び出す部分は
formtest f = new formtest();
f.formshow();
を入れておいて
別クラスで例えば
class formtest:Form
{
public formtest()
{ }
public void formshow()
{
var form = new System.Windows.Forms.Form();
var pb = new System.Windows.Forms.PictureBox();
pb.Image = System.Drawing.Image.FromFile(imgpath);
pb.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
form.Controls.Add(pb);
System.Windows.Forms.Application.Run(form);
}
}
を作っておく
>>566
ああちょっと遅かったか >>568
丁寧に教えてもらいありがとうございます
どの実現方法も勉強になりますし、解がすぐに思い浮かびコードにできるのは憧れます >>570
すいません手順間違えて動くと勘違いしていましたw
結局同じことなので参考にしないでくださいw 変数がNULLだったら、ってこれが一番シンプル?
a == null ? 0 : 1;
>>571
そうでしたか
検証までしてもらい申し訳ないです >>575
書けない。nullの場合の値設定のみ。 NULLじゃなかった場合の処理が要らない場合は>>574がベスト? a == null ? 0 : a;
a ?? 0;
は同じ内容になる
Unity+C#の質問になっちゃいますが、
=========================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ball_Ctrl : MonoBehaviour
{
public float speed = 50.0f;
void Update ()
{
Vector3 test = new Vector3();
test.x = Input.GetAxis("Vertical") * speed * Time.deltaTime;
transform.Rotate( test );
}
}
==========================================
これをキューブ型の3Dオブジェクトにぶち込むと上下キーで回転するんだけど、
これに回転制限を設けたい場合どうすればいいか教えてください!
>>581
とりあえずtest.xの値をリアルタイムで確認してみるとか
ちゃんと制御できてるのがいいんだろうけどな >>581
test.x = Input.GetAxis("Vertical") * speed * Time.deltaTime;
// minAngle〜maxAngleの間に制限
var minAngle=20f;
var maxAngle=160f;
test.x=test.x<minAngle?minAngle:test.x;
test.x=test.x>maxAngle?maxAngle:test.x; >>582
>>583
この説明受けてもまだチンプンカンプンで申し訳ないのですが、
実際に角度を変えている「transform.Rotate」ってのが
「現在の角度+test.x」って事だから、
if文で、
もし現在の角度がmin°〜max°以内の範囲ならば
test.x = Input.GetAxis("Vertical") * speed * Time.deltaTime;
って事ですかね?
現在値なら
genzaiti = this.transform.eulerAngles.x;
で現在の角度を取得出来るんですが、
なんか上手くいかない・・・
>>583の
test.x=test.x<minAngle?minAngle:test.x;
test.x=test.x>maxAngle?maxAngle:test.x;
の記述も意味がよく分からないです・・・ genzaiti = this.transform.eulerAngles.x;
if(genzaiti>=min && genzaiti<=max) {
test.x = Input.GetAxis("Vertical") * speed * Time.deltaTime;
}
こうしてもうまくいかないってこと?
>>584
ああ、transformって姿勢行列か
だったらtransform→angleの変換は期待しない方がいい
angle→transformは一方通行として
現在のangleを保持して
毎回transformをangleから作る感じで using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ball_Ctrl : MonoBehaviour
{
public float speed = 50.0f;
public float genzaiti;
public float min = -15.0f;
public float max = 15.0f;
void Update ()
{
Vector3 test = new Vector3();
genzaiti = this.transform.eulerAngles.x;
if (genzaiti >= min && genzaiti <= max)
{
test.x = Input.GetAxis("Vertical") * speed * Time.deltaTime;
}
transform.Rotate( test );
}
}
====================================
教えて頂き、こうしてみたんですが
挙動がおかしいです
if文的に
↑をおしてmaxを超えるとキー入力を受け付けなくなるのは理解出来るんですが、
↓キーをおすとgenzaitiが359とか謎の数値になるのが理解できない・・・
>>587
if (genzaiti >= min && genzaiti <= max)
↓
if (genzaiti%360 >= min && genzaiti%360 <= max) RubyはPerlより優れていてPythonより劣っている。
もう、自分でゴリゴリロジックを書くのが馬鹿らしくなってきた。
何処かの偉い人が言っていたが今のプログラミングは工学じゃなくて科学だと。
nugetか何処かでライブラリを拾ってきて、ひたすら実験を繰り返し、
自分の期待通りの結果が得られるかどうか判定するのみ。
ドメインロジックもそれでできるならいいけどね
できないでしょ
>>593
むしろそれのどこが科学なのかとw
電気屋も建築屋もパーツや材料がスペック通りの性能を持ってるか
実験するけど、それを科学とは言わないと思うよw 今週はずっとlockとかMoniterとかManualResetEventSlimとか
new Thread(new ThreadStartとかTask.Factory.StartNewとかTask.Run
などなど書いていて頭痛くなってきた、やり方いろいろありすぎ
今だとほとんど使わないよねその手の非同期ライブラリ
>>592
ひとまずこれをブチ込んでみたら思った通りに動いた!
よく見つけてくれましたね!ありがとうございます!
いまから一個ずつ理解するため勉強します。
他のみなさんも親切にどうもありがとうございました!
今回の件はとりあえず一件落着です。 >>595
現代のプログラミングは科学だって言ってるのオレじゃないけどねw
ソフトウエアってパーツや材料みたいなきちんとしたスペックなんかは無いし
ソースが巨大でブラックボックス化しているので
自然科学の実験と観察のようだと皮肉って言ってるんだと思う。 >>597
いや全部使うだろ
マルチスレッドといえば、社内にParallel厨がいてうざいわ
ボトルネックになってないのに無駄に並列化するのやめろ
オーバーヘッドを増やすだけで全く速くなってないんだよ >>601
いや使わんよ
スレッド間の結合が強くなりすぎる Taskは使う
他は保守性下げるから使いたくないし使わなくても問題ない
>>601
そういうヤツに限ってLockがなんだか分かってなくて共有リソースのロックが放置プレイ。
たまたま動いているような状態だ。 Taskは普通に使うけど、わざわざThreadを使うケースってなんかあったっけ?
>>605
Task.Runってメインスレッドより早く終わるのが前提でしょ
メインスレッドと同時に立ち上げて上がりっぱなしのだとThread.Startでしょう。 >>607
へぇ〜、スレッドプールを消費しないオプションがあったんんだ。
でも、Thread.Startを使わないでTask.Factory.StartNewに
TaskCreationOptions.LongRunningを付けて実行するメリットって何があるのだろ? もちろんid真っ赤な方に言ってるんで誤解せんといて
>>609
真っ赤とかどうとかじゃなくて素直に聞いているだけなんだけどな。
Task.Runはお手軽だけどTask.Factory.StartNewにそれほどのメリットを感じないので聞いてみた。 使いたいなら使えばいいよ誰も文句は言わん
仕事で遭遇しなきゃ害はない
なんだこいつら...
その人は普通にThreadでいいものを無理してTaskでやる意味聞いてるだけじゃん....
なんで突然キレ出したのか謎すぎる...
>>613-614
だから、メインスレッドと同じ寿命のスレッドはTask.Runでどうするんだよ。
答えられないのなら、煽るような真似をするな。 >>614
過去の遺物
今はasync/await一択 >>618
Taskとasync awaitってめっちゃ紐付いてるじゃん
切り離して考えるのはおかしいぞ >>619
Task.Runを自分で書くのは過去の遺物ってことじゃね? 過去の遺物と断言できるのはThread.suspend
Unityとか出て来たから初めて使ってみたけど楽しい
.net4.0までの環境で仕事してるおれにも同じ事いえんの?
XP使ってるエンドユーザーを切り捨てできなきゃそうするしかないね
>>623
今更感はあるのでしょうが、僕も数日前に初めてUnity(C#も)触ったんですけど
すごいですよね!今ってこんな感じにゲーム作れるんですね・・・
僕の場合3Dモデラーなんで、覚える事いっぱいだけど
プログラム出来る人なら無料のアセット入れたらすぐさまゲーム作れそうですね >>608
キャンセルや例外の処理などを他のタスクと同列に扱える。
それらが必要無いなら特にメリットも無いけど、Threadクラスに拘るメリットも無い。⇒Taskで一本化 >>628
ありがとう!
そう言う答えが欲しかった。
メインスレッドと同時に起動しっぱなしになるスレッドをTaskで起動すると
Task内で発生した例外がTask終了時に一気に飛んでくるという解釈でよいのかな?
それだと使いにくいな。 プログラム終了時に例外が発生することがあるが
ひょっとして.NETライブラリ内のTaskが災いしてる?
>>630
自分で作った立ち上げっぱなしのスレッドorタスクの後処理をしてないんだろ
>>631で合ってるなw 立ち上げっぱなしかどうかは関係ないか
そこは訂正しとく
>>633
nugetで拾ったライブラリの中の人の行いが悪いからだな。 >>629
逆で未処理の例外があればTaskが終了する
それはThreadと同じ よくあんなゴミに声をかけようという気になるものだ
類は友を呼ぶからか?
上の人からの
古い方が安心だから
と訳が解らない理由で.Net3.5を採用しようとしてる新規プロジェクトがあるw
当然現場は猛反対しているが
>>642
変化を極端に恐れるジャップ体質どうにかしてほしいな >>640
wait, resultのとき以外でも落ちるのか? 民族性じゃなくて契約の問題
それでコストが少し増えたとしても成果じゃなく工数で金取るから不利益にならないし、
客の事業じゃなく作業に対して責任を負う以上はもどうしてもオーバークォリティにならざるを得ない
自社サービスの会社だと軽いノリでバージョン上がるぞw
>>642
多分、安心と言っている意味が違うかも。
.NET3.5はMSが終了宣言できないバージョンになる。
vb6の様にゾンビの如く生き残り安泰w >>645
受託じゃNode.jsなんて使う機会は無いもんね
自社サービス会社のがプログラマーは楽しそう >>639
おまえは開発環境変更できる権限あるのか。いいな。 >>653
使わない
というかawaiasyncってなんだ?って連中の方が多数派なので使えない
冗談みたいなホントの話 >>654
使ってても待たせてるだけで何も出来ないとか
意味ないじゃんw っての >>650
デスクトップだけなら共有プロジェクトでいい >>653
バリバリ使ってる
知らない人でも説明すれば大体は解ってくれる
こんな便利なものがあるんですね!と感動する人
ふーんな人
非同期何それ美味しいの?な人
説明では解ったと言いながら実装では悪戦苦闘してる人
反応は様々だね >>657
おれなんかTaskで匿名メソッドシコシコ書いてるわ! すげーでかい図を出力したいんですがフォーマットは何がオススメですか?
画像だとデスクトップより大きくなると表示できないようです
>>660
あ、申し訳ないです
フォームでエラー出てました >>661
x64(AnyCPU)で動かす
それがだめなら自分で必要なだけ読み込んで部分的に表示するしかない
GDI+にはそんな機能無かったと思うから >>654
知識が.NET2.0くらいで止まってる人が多いよ。
それ以上の言語拡張は開発者置いてけぼりのMSの自己満足かもね。 >>657
非同期何それ美味しいの? 調理間違えても、お腹壊さない? >>663
というか、アメリカは内製が中心だからバージョンについて日本ほど保守的にならなくていいんだと思うよ >>664
エラーは今回どうでもいい情報なんだよな
むしろ表示する用途・解像度・実行環境の方が重要
x64なら10000*10000 pixel*32bppのBitmapでも余裕で表示できるけど ただのコーディングミスでNullReferenceとか最悪コンパイルエラーまである
>>667
実際の実装に無難で枯れた技術を使うのと
新しい技術に無知なのは違うと思うけど >>670
そういう問題じゃないの
内製だと、選んだ技術について組織の中でノウハウを蓄積しやすい
また、開発も運用保守もユーザーも同じ主体なのでJVMのバージョンアップでベンダーに億単位でぼったくられるようなことにはならず、
更新の障壁が比較的低いんだよ >>668
いや、、フォームのエラーだけじゃわかんねえだろ、、、
本当にお前の思ってるのが原因か、、? >>672
ま、見積もりありきの受託開発とリスクのある新技術の導入が合わないのはあるとは思う
なんでc#スレでJVM w >>673
考え方が逆だと思うんだよな
エラーだけ示されて解決できるのならそうしたらいいと思うけど、どっちにしても本人が何も言わないのならどうしようもない 内製じゃないけど開発の各関係部署にプロトタイプを配るのにクレームがつかない為に.NETのバージョンを下げてた人達がいたなあ
当然製品版も下げてたww
その話聞いて笑うしかなかった (´・ω・`)
ライセンス料ケチってVS2010とか使ってるのが原因の場合もあるぞ
LINQの書き方で質問ですが
特定の教科の赤点の人数を調べるとした場合
数が少なければ↓のような処理で済むのですが
public class Test
{
public string 名前 { get; set; }
public int 国語 { get; set; }
public int 数学 { get; set; }
}
List<Test> ListTest = new ListTest ();
string Kyouka = "国語";
int akaten = 0;
if(Kyouka == "国語")
{
akaten = ListTest.Where(x=>x.国語 < 30 ).ToList().Count;
}
if(Kyouka == "数学")
{
akaten = ListTest.Where(x=>x.数学 < 30 ).ToList().Count;
}
数が増えるので↓のような書き方がやりたいんですが無理ですか?
akaten = ListTest.Where(x=>x.Kyouka < 30 ).ToList().Count;
>>678
dotnet cli + VSCodeでいいじゃん
商用無料で最新バージョン使えるぞ
SCDなら配布も楽だし
なんで流行らないんだろ
旧バージョンもう要らんでしょ 種類が増えるなら教科ごとにプロパティ作るんじゃなくて教科名+点数の辞書のリストにするのが自然だと思う
>>682
データ設計が悪い
テスト結果(生徒ID, 科目, 点数)
生徒(生徒ID, 名前)
この方がSQLフレンドリー >>682
C#じゃないけどSQLアンチパターン読んだほうがいい
var map = new Dictionary<string, Func<Test, int>() {
["国語"] = t => t.国語,
["数学"] = t => t.数学,
};
var ans = map.Select(e => new {
科目 = e.Key,
赤点人数 = TestList.Count(t => e.Value(t) < 30),
});
foreach(var a in ans)
Console.WriteLine($"{a.科目}: {a.赤点人数} 人"); >>682
それ、LINQいっこも関係ないような気が...
Func<Test, int> getScore = (x) =>
{
if (Kyouka == "国語") return x.国語;
if (Kyouka == "数学") return x.数学;
};
akaten = ListTest.Where(x => getScore(x) < 30 ).ToList().Count; >>687
それは毎回無駄な科目チェックが入るから非効率
せっかくデリゲート使うんなら最初にgetScoreを科目に応じたものに差し替えるのがスマート
もちろんそれ以前にデータ設計が間違ってるけど >>688
そりゃそうでしょうけどストレートにオーダーされたものを出してるだけなんでw var akaten=ListTest.Count(x=>(int)(typeof(Test).GetProperty(Kyouka). GetValue(student))<30);
>>684
>>685
やっぱりデータ設計が悪いと言われますか
今のうちに変えてしまうべきなのかな
>>686
Dictionary使ったことなかったので参考になります。
SQLアンチパターンすごい為になりそうなので読んでみます。
>>687
>>690
まだ完全に理解できていないけど参考になります。
レス参考に対応してみます。
みなさんアドバイスありがとうございました。 new Dictionary<string, int>(){
{“たろう”, 68}
}
型引数を推論させて
new Dictionary(){
{“たろう”, 68}
}
みたいにできないの?出来ればいいのに。
C#7ならたぶんこう書ける
static Dictionary<TKey, TValue> ToDictionary(this IEnumerable<(TKey key, TValue value)> items) =>
items.ToDictionary(x => x.key, x => x.value);
new[] { ("たろう", 68) }.ToDictionary()
awaitってなんの意味があるの?
待ってたら非同期の意味なくね?
>>695
処理が終わるまで待ってるように見えるけど実際は別にスレッドを使って
違うことを同時にやってるだけ >>697
?
メインのスレッドはタスクの実行完了を待機状態なんだろ?
待機してたら何もできないから意味なくね? >>698
awaitの後の処理をタスクにして、awaitで待ってるタスクの後続タスクにしてる。
メインのスレッドは待機してない。 >>698
簡単なコードで試せるんだから2chに書き込む時間使って動作確認すれば? メインスレッドはいわゆるwaitをしている訳ではない
最近のオシロスコープはWebサーバー機能を持っていて、Webブラウザでアクセスすると
計測画面を表示させることができますが、C#で同じような機能を簡単に実装することはできるでしょうか?
リモートデスクトップではなく、WinFormsのアプリ画面だけをネット越しに共有する感じです。
>>703
中にwebサーバー入ってんじゃね?
c#でって言われてもハードの構成が何を想定してるのかわかんなくね? >>703
WinFormsの画面を配信したいってこと? サーバーのHDDのインストーラをぶっ叩けば.netframeworkも入るぞ
精度や遅延はどの程度なら許容されるんだろ
オシロスコープに出来るんならC#でも出来るとは思うけど
どんなデータの送り方してるのかまでは分からない
>精度や遅延はどの程度なら許容されるんだろ
要件による
遅延に関しては、ユーザ視点で表面化し難い様に誤魔化す方法が幾らかはあるし
>>705
その通りです。
作ろうとしているのはオシロスコープとは全く別で、計測器の取得データを延々と
表示し続けるようなものです。
現状はファイルベースで共有しているのですが、例として出したオシロスコープのように
ある程度リアルタイムの値も見たいと社内で要望があったので。
なので、遅延は数秒レベルでも全く問題無いです。 >>710
websocketサーバー立ててjsonで生のデータを定期的に送信するようにする。
javascritで受信してcanvasとかにそれを表示するウェブアプリをウェブサーバー立てて配信する。 この場合ってHDDからデータ取ってくるだけじゃね?
ElasticsearchとKibanaでも使えば?
>>713
javascriptで定期的にデータのファイルをダウンロードして表示するようにするだけか 後は計測間隔がmsスケールとかじゃなけりゃ
そんなに難しくは無いと思う
昔USBや232C接続の計測器のデータ拾う仕事してたけど
ネットワーク越しはやったことないな
サンプルレートはmsオーダどころか10ksps以上でも問題ないでしょう
windows visual studioでのフォームアプリを使ってのC#の質問です
例えばTextBoxAとTextBoxBのテキストボックスを
フォーム上に配置して
TextBoxAに「あ」と入力してEnterを入力したらTextBoxBに「い」と表示させるようにしたいのですが
どうすればいいでしょうか?
>>720
テキストボックス1のイベントハンドラでテキストボックス1のTextプロパティを取得して、それが「あ」ならテキストボックス2のTextプロパティに「い」を代入する。 >>720
スレの存在意義を否定するようだけど
その程度でいちいち質問してたら先が思いやられるよw
public Form1()
{
InitializeComponent();
textBoxA.KeyDown += (s, e) =>
{
if(e.KeyCode == Keys.Enter && textBoxA.Text == "あ") textBoxB.Text = "い";
};
}
自分でやっといて何だけど、本当はいきがってラムダ式なんか使わずに
イベントハンドラを書いた方が保守性の面では好ましいと思う いきがってラムダ式とか使ってるけど直前のレスがほぼ完全解答という
キメェ
ctrl+vでどうなるんだ?
とか最終的にはkillfocusちゃうの?
とか考えると普段ぜってー組まない
コード見ると黒板キィィィィィって
やられてる気分になる
>>726
エンターで動作なんだからCtrlVがどうこうとかイミフだしフォーカス外したいなら外せばそれで済む話じゃねえか >>730
テキストボックスでkillfocus以外での処理は鬼門
そういう暗示にかかっているのです
でもctrl+Aは気軽に入れるけどね データバインド教えて
this.dataGridView_List.DataSource = list;
これをロード時に書けば
listにAddしてけばDataGridに行追加されてく?
listがINotifyCollectionChangeを実装したオブザーバブルなリストならね。
ただのリストじゃ反映されないと思う
素朴な疑問なんですけど
ListコレクションからLINQでデータ検索したい時とか、データがソートされてる方がパフォーマンスが良いとかあるんでしょうか
>>736
ソートされてるならBinarySearchを使えば速い
LINQ使ったら線形検索になるのでソートは意味ない >>737
BinarySearchが使えるのは知りませんでした
ありがとうございます 1 のとき 0.7
3 のとき 0.9
8 のとき 0.6
9 のとき 0.5
こういうデータがある時、右の要素が最大である左の要素の番号を返すプログラムを作りたいのですが
簡単な方法はないでしょうか?
List〈class〉でやってみるといいのでは?
class Data
{
public int id{get;set;}
public double result{get;set;}
}
みたいに作って、ListをループさせてData.resultを確認して一番大きい数字のid(クラス)を返すみたいな
ICollectionに一番大きい数字のindex返す関数とかあった気がするからもっと楽に作れるかもしれないけど
楽さなら右要素でソートして末尾の左要素返せば
普通に探索しても大した手間の差ではない気もするが
>>740
DBに突っ込んでから
select key from data
where value = (select max(value) from data)
でいいよ @“1 のとき 0.7
3 のとき 0.9
8 のとき 0.6
9 のとき 0.5”
.Split(‘\n’)
.Select(line => line
.Split(“のとき”)
.Select(piece => piece.Trim())
)
.OrderBy(pair => pair[1])
.Last()[0];
>>744
この仕様はまったく考えてなかった
仕様聞くのって大変だな・・・ みなさん有難う御座います。
Dictionaryを使ってみようと思うのですが
Dictionary<string,double> dict = new Dictionary<string,double>();
dict.Add("1",0.7);
dict.Add("3",0.9);
dict.Add("8",0.6);
dict.Add("9",0.5);
このあとvalueが最大値の時のキーの値を求める方法がわかりません
dict.OrderBy(pair.Value).Last.Keyじゃダメなんでしょうか?
>>751
現在のコンテキストに 'pair' という名前は存在しません。
というエラーが出て出来ないです… pair宣言してないからだろうに、
dict.OrderBy(pair => pair.key).Last.Keyじゃないかな。
もちろん
pair => pair.Value
だったな。
>>752
どこか適当なところで勉強してから来なさい >>757
同じキーが存在するのにDictionary使うのが間違い
他の人が例として使っているDataクラスで事足りると思うんだが そりゃキーが重複したらエラーになるよ
辞書ってそういうもんでしょ
あと重複があるんなら>>749のを使えば? 「valueが最大値の時のキーの値」だけが必要なんじゃなかろうか?
配列の大きさが不明なのでaddが使える方法でやりたかったもので…
var list = List<Data>()
これを使えばいい
Addもできる
>>762
単に最大時のkey, valueだけが欲しいのならListもaddも不要だけどね。。 Name : aaa
Info : vvv
Message : sss
テキストファイルに↑のような空白文字で:を揃えた情報を、File.ReadLinesで取り出し、
.ToArray()で配列にしたあとTextBoxのLinesに設定したところ、コロンの位置がずれてしまいます。
foreachでTextプロパティに追加していく方法でもずれるのですが、Consoleだと綺麗に出力されます。
なにか対策等ありますか?
>>765
コンソールと同じように、テキストボックスのフォントをMSゴシックみたいな等幅フォントにする >>766
MSゴシックで試したところ解決しました。
ありがとうございました。
等幅フォントの使い道がこんなところにあったとは、でした。 >>749とList使った方法で出来ました!
有難う御座いました。
ソート時の=>の書き方が色々あっていまいち理解出来てないですが… ラムダ式とLinqは後々覚えていけばいいんじゃないの
とりあえずこういう書き方もできるって事で
ラムダ式はデリゲートと同時に覚えようよw
たいして覚えることないんだし、今時C#プログラマの最小要件でしょ
HttpClient client=new HttpClient();
FormUrlEncodedContent contents = new FormUrlEncodedContent(new
Dictionary<string, string>{
{"あああ","1"},
{"あああ","2"},
{"いいい","0"},
});
respnse = await client.PostAsync(url, contents);
このままだと同じキーを含んでいるのでエラーが出ます。
サイトの仕様上、このままデータを送らないといけないのですが、どう変更すれば
きるようになりますか?
>>770
1 のとき 0.7
3 のとき 0.9
4 のとき 0.9
5 のとき 0.9
こんなデータのとき、3,4,5のどれでもええの? >>773
KeyValuePairの配列でやってみたら?試してないから動くかわからんけども >>769
ありがとうございます。タブ文字でもできることを確認しましたが、
今回はString.Format("{0, 4} : {1}", num,message)のような文字列も綺麗に出力したいので
等幅フォントを使用したいと思います。 >>773
new List<KeyValuePair<string, string>>{
{"あああ","1"},
{"あああ","2"},
{"いいい","0"},
} >>774
左のデータは重複することはあっても右のデータは0.93234…みたいな感じで重複しない感じです! >>774のようなコーナーケースの指摘に対して、「そんなケースは稀だから考えなくてよい」とするか
「どっちでもいいならどっちかに決めよう」とするか、開発センスが現れるな。 最大値の行を取り出すだけにコレクションは不要だけどね
>>783
配列の最大値を所得するロジックを知らんと?
配列ソートの前に習うだろ。 >>782
配列リストの最大値出せるけど今回はindexがバラバラになってるじゃん 一応配列もコピーとサイズ増やして擬似的に追加は出来る
昔の俺が調べて書いてたけどコレクション使えと怒られた
>>788
それはお前らが誘導したからw
元データの構造がが何なのかワカランとどれが最適かはわからんな >>791
c#の中からいきなり>>740のデータが湧いて出てくるはずもなく、
そのような仕様があるとしたら「宿題」だなw >>792
いい加減黙ったら。
必要だからListにしてるだけで、>>782とか何の足しにもならんぞ。 >>794
オレは最大値を取り出すだけならリスト構造は不要と言っているだけだ。
間違ってるか? >>796
元データを用意する実装の都合でそうしてるだけなのに、そんな分かり切ったことを言う必要ないだろ。
勘違いしてるそぶりもなかったしな。 >>798
最大値を取り出すためにリスト構造にしているわけではない。
これなら分かる? あの説明でこの配列仕様考えてたってこと?
double?[] data = new double[]
{
null,
0.7,
null,
0.9,
null,
null,
null,
null,
0.6,
0.5
};
>>800
あぁ多次元やジャグ配列があるか
これ忘れて >>799
最大値を取り出した後の事に触れて無いのも事実。
最大値だけが必要なのか、取り出した最大値を使ってリストに何かをしたいのかわからない。
本人は最大値の取得だけで満足して消えてしまったし。 右が最大値の時の左の要素の番号が欲しいって書いてあるぞ
インデックスも飛び飛びで左の要素が重複するときもあるって後から出してる
確かに多次元やジャグ配列ならその仕様はありそうだけどその差は技術力の無い俺には大きな差がわからん
今日のウンコの最大サイズとか何回目に出たウンコとかどうでもいいだろ
>>807
それ、最大サイズとかじゃなくて
少量でもアウトだから 非同期処理のasync/awaitって
処理A
var ret = await Task();
処理B
みたいなときはTaskの中の処理が終わるまでは処理Bには進まないという理解であってる?
あとTaskの中がプロパティに値を代入するだけみたいなawaitを使うタイミングがない場合は
await Task.Run(()=>{ Taskの中でやりたい処理 });
って書くしかない?
>>809
1.そのasyncメソッドの中だけを考えればそれで合ってる
2.ちょっと何言ってるか分からない awaitを使うタイミングがないって何? まだひよっこでよくわかって無いんだが
過去の他人が書いたコードで
if (条件){
処理 A
}
else if (条件){
処理 B
}
else{
// 何もしない
}
みたいなコードを見ることがあるんだが
このelseの何もしないってのは必要なのか?
>>811
大雑把に書くと下みたいなクラスのプロパティ書き換えるだけのメソッド
awaitする要素見えないけどawait演算子書かないとvisual studioが警告出すからどうやってawaitすればいいのかと
private async Task<bool> Task()
{
a=b;
c=d;
return true;
} >>812
本人に聞けよw
というごく当たり前の話を省くと
・説明的なコードとしてわざわざつけくわえてある
・追加の可能性があるのでわかりやすいようにわざわざ残してある
このあたりじゃだめか?
C#として必要か?って話なら自分で消してみてビルドしろよって返す 後々追加するかもで書いたり何もしないってのをはっきり伝えたいとかで書いてるんじゃないかな
コンストラクタで
class Sample
{
public Sample()
{
//何もしない
}
}
に近いものを感じる
>>814>>815
本人はもう辞めてたの
あぁ説明的な感じなのかな
別にこんなふうに書くのがC#のお約束とかじゃないよね >>816
IDEやコンパイラが怒らない限りC#の約束事とか知らんしどうでもいい
そしてそのくらいの最適化はコンパイラに期待できる 使い道としてはなんだろね
何もしないにブレークポイントを設定するとAもBも処理しない条件のとき止まるかな
だったらlogger.infoしといてもいいのに
>>812
SIerのコーディング規約としてCOBOLの次代からある書き方だよ。
機械的にelseを入れるんじゃなくてelseの処理で何かもれて無いか考えてから空elseを入れましょうって事が形骸化して残ってる。
ほぼなんの意味もないコードです。 >>817>>819
その人独自の癖みたいなもんだったってことか
消しても問題なく動くんでまぁ大丈夫っぽいし >>809ってretが処理Bの中で使われなきゃ、待たずに処理B行っちゃうんじゃないの? そのコードがasync修飾子を付けたメソッドの中に書かれてるとしたらそれはないだろ
非同期処理内のコードでは無かった
これってasync修飾子内のコードだとなんかのエラー回避とかになるの?
下のSetメソッドだと処理Bでretを使ってなくても大丈夫?
private async Task Set()
{
処理A
var ret = await Task();
処理B
}
private async Task<bool> Task()
{
a=b;
c=d;
return true;
}
上のコードでTaskの中身にawait使いたかったら下みたいに書くしかない?
他の方法ある?
private async Task<bool> Task()
{
Task task = Task.Run(()=>{
a=b;
c=d;
}
await task;
return true;
}
>>825
この間からネットでしかストレス解消できない寂しいやつが湧いてる つーかガックシって大学回線のワッチョイか
まさに低脳猿そのものだな
大学から2chとかどこの馬鹿大学の馬鹿ガキだよ
ワッチョイの下4桁が変わってねぇぞ大学から2chの低脳猿ガキ
>>812
忘れたんじゃなくて意図した動きですよって申し送りか datagridviewで下から2つ目だけ変更する方法教えて
1 あああ
4 いいい
8 ううう
9 えええ
2 おおお
上から探索して行特定してCell位置指定して編集するしかない?
>>834
えーおもろ
DataSouce使うと
プロパティ名がそのまま項目名になるのか ガチでアシンクだと間違って記憶してたわw
aが頭について「非」の意味になる単語って他にあったっけ?
aliveやaloudは違うしなあ
>>827
1.大丈夫
2.プロパティの設定ぐらいでTaskにする意味があるかは別にして、Task.Runでいいよ >>827
Task.Runはその中が別スレッドになるので注意。
return await Task.FromResult(true);
か、
asyncを外して
return Task.FromResult(true);
で。 >>841
return await Task.FromResult(true); じゃなかったらTaskがiscompletedになる前に終わっちゃう? private Task<bool> MyTask()
{
return Task.Run(()=>{a=b;c=d;;return true;});
}
で良いと思うんだわ。戻り値が何故必要なのか知らんが
>>812
場面によるが 「何もしない」ではなく、asset(0) を書く、というのはやる
そうなるようにすべて条件をきっちり列挙するようにしている、c# にアサーションはありますか? >>841
上のやつってTask<Task>が返ってくるの? ワッチョイ末尾forRは大学から書き込んだりIDコロコロ変える煽りガイジなのでNGname推奨
x 変える o 変わる
ササクッテロも煽りカスなのでNG推奨
何度も同じこと言って申し訳ないけど、だからワッチョイだのIDだのって嫌いなんだよね。
こういう他人にネチネチ粘着する馬鹿を喜ばせるだけのことで、
本来の目的であったはずの荒らしに対する抑止力どころか、かえって逆効果にしかならない
しかしさあ、いつも思うんだけど「誰かに粘着してやろう」とか思う奴って
どういう思考回路してるのかね。
俺には粘着する側の負い目を語るに落ちてるようにしか見えないけど、
テメエを客観視する能力ってものがないのかねw
>>850
しかしさあ、いつも思うんだけど、毎回この「いつも思うんだけど、〜、かねw」パターンのレスを繰り返す奴ってどういう思考回路してるのかね。
俺には認知症か記憶障害にしか見えないけど、
テメエを客観視する能力ってものがないのかねw >>850
無かったらないで気持ち悪い自演をする奴がいるからあったほうがいいよ
こっちのが連投中の単発IDは信用に値しないだけだし >>852
その人は10年以上それやってるからほっといてあげて >>850
ID は良かったともうよ、期限付きで連投荒らしを排除できるからね
土方キチガイちゃん、今はどうしているのかな… (´・ω・`)linqってマジックみたいにむちゃくちゃすごいってほんとなの?
C# っておぼえるのむずかしいの?
>>860
C#はメジャーな言語の中では特別難しいわけではないがどっちかというと難しめの部類
もともと他言語の経験者向けに作られた言語なので、他の言語の経験があればわりとすんなり入れる
反面、プログラミング自体の初心者には「なんでそんなことをするのか」と感じる部分が多く馴染みにくいと思われる
C#に限ったことじゃないが、プログラミング自体が初めてなら最初は誰でも血を吐き地獄を見て自分の無能さに絶望するもんだ >>860
linqじゃなくてもjavascriptでも同じこと出来る >>861
> プログラミング自体の初心者には「なんでそんなことをするのか」と感じる部分が多く
具体的にどんなところ? コンソールアプリケーションから学んでけば、そんなでも無いと思うけどな
いきなりGUIじゃ訳分からなくなるのも当然っつーか
「今は分からないだろうけど、取り合えずおまじないと思って書いといて」
的なお約束なんて、Cでもあるもんだし
初心者なら「なんでstringだけnullableなんだよOptionとかねーのかよ」と思うだろう
>>873
アホなのか?
面白い回答なんて求めてない >>87のレスがダメな理由をアホにもわかるように説明してくれ >>870のレスがダメな理由をアホにもわかるように説明してくれ >>867
stringはclassだからnullableなのは当然じゃね?
どこに引っかかっるのか分からん nullableじゃない他の言語があるってことじゃね?知らんけど。
>>878
string はimmutableだから
newが要らないというより
newが必要となる状況がない
newしてインスタンス作っても
そのインスタンスのプロパティを変更する術がない
immutableだから 872 デフォルトの名無しさん (ワッチョイ 5fb3-CDhT)[sage] 2017/11/25(土) 23:01:32.05 ID:+Jz8ZPqE0
>>869
そう言うつまんない返し要らんし
? 流れをぶった切って申しわけないが
container.Resolve<IEventAggregator>().PublishOnUIThread(new MaxProgressMessage(FileList.Count));
が長すぎて幻滅してるんだ、短かくする方法ない?
手段を問わないならジェネリックメソッドでも書けば短くなるだろう
その呪文は必ず出てくるやつだから、ベースクラス作って埋め立てて見えなくするのも手だ
>>891
理由を書け
とアホにもわかるように書かないとダメなの? 横からだけどnewする意味が分からなかった
無駄に見えた
AAA aaa = new AAA();
それとAAAが二回書かないといけないのも無駄に見えた
今はvarがあるからいいけど
c++だと AAA aaa;でオブジェクトができる
そこはC++で比較するなら、
AAA* aaa = new AAA();
でないの
もっと言うなら、参照型だからnewが必要になるんであって
C#のクラスは全て参照型だから、ってのが理由でしょ
newが分からないって人はおそらく
C#がというよりオブジェクト指向が分かってない
"Hello, world." 出力させるだけなのになんでなんでこんなに長いコードが必要なのかと思ったわ
エントリポイントがあって、入出力のライブラリを読み込まなきゃいけないからしゃーない
……というのを理解する為に、基礎知識って必要なんすよな
>>897
分からない じゃなくて、 初心者のころ分からなかった。 コンソールアプリを作った時のmain関数の戻りが何故voidがデフォ?
今更だけどスレタイのふらっとって♭とかかてんだな
今気づいたわ。考えた奴センスあるな
「C#」の失敗は
↑この名前そのもの。
名前に記号を含んだことでネット検索などでの調査が非常にしずらい。
現にこのスレのタイトルは検索で辿りつけるようにシャープを3種類(#,♯,#)も使っている。
Goなんてグーグルで検索するの大変、グーグルなのに
普通に検索できるけど。
>>906
> 名前に記号を含んだことでネット検索などでの調査が非常にしずらい。
いつの時代で止まってるんだよ w 検索で苦労したのは初期だね
ある程度広まると普通に検索できるようになった
Google先生をなめてはいけないw
>>906
Google舐めんなよ、c#の検索で困ったことはないぞ 名前の短さとユニーク性から言って他の言語の中で1番検索が手軽だろ
記号よりもCの派生みたいな名前しといてわりとそんなことない方が問題
>>915
まあどっちかっつーとDelphiの流れを汲んでるからな windows7出たあたりのときもc#とか記号入りの語句の検索に
Google自体が弱かった
英語圏だとc sharpとかやるのにお前らなんでシーシャープとか検索の工夫せんのや?
スレで聞いたり回答はしても自分でググらない人がいるのか
C# のあとに調べたこと書いて普通に見つかるのに
>>917
記号を検索してくれなかったからな
なので演算子の検索とかも大変だった ちょまどよりもドボンのが貢献度高いけどドボンはMSにスカウトされたの?
C#でもDIしてみたいと思ったのですが、使うのは絶対にインターフェースなのでしょうか
抽象クラスを使ってる例を見ないので、ひょっとしたら抽象クラスは使わないのかと感じています
>>928
インターフェース継承(必ずしもC#のinterfaceではなく、使う側からの見え方を継承するという意味ね)に抽象クラスを使うのは今時はあまり好まれない
規模の大きな開発だと、使われる側の前に使う側のクラスが先に実装されてしまうこともよくあるし、
いちいち個別に判断するより少々冗長になったとしても全部interfaceの方が分かりやすいし後で融通利くだろという考え方をすることが多い
抽象クラスを使って実装を共通化したい場合は、interfaceを抽象クラスが継承してそれを更に継承すればいい インターフェースはクラスじゃないんだが、そこら辺から勉強やり直したほうが良いと思う
>>932
インターフェースいらん
何かメリットある? >>933
例えばusing構文は、interfaceに依存しているけど
アレ便利だと思わん? >>934
思わん
実際意図通りに動くかどうかは中身を見ないとわからんから
usingで書いたけどリークしたりとかあるあるじゃん >>927
ドボンの中の人は匿名で出たがりじゃ無いのでオファーが有っても断ってるだろうな。 そもそも不特定多数が突然触る環境って開発じゃないよな
ちゃんと設計してから組むのが当然であって
どんな場面を想定してるのか全くわからない
インターフェースを統一しようがどうだろうが必要なデータを必要なだけしか渡さないでほしい
>>935
usingはDisposeを呼び出すだけの機能なんだから、バグが有るなら実装したアンタの責任だろ >>939
別に俺が作ったときの話してるわけじゃない
そもそも俺はこのクソ機能嫌いだから使ってない 標準ライブラリぐらい共有されてるソースでしか使わないほうがいいんじゃない?
コミュニケーションコストが大きくない?
ドキュメントもそれなりに書かないとどこの誰向けのインターフェースなのかわかりにくい
お客様に使わせる前提?
サンプルソース用意した方が良さそうだし
だからBindableBaseは使いにくいんじゃハゲ言われても
毎回INotifyPropertyChangedを実装してる方が毛根に悪いだろ
どうせならstaticおじさんパロって「しっくりこないんです」って言ってほしかった。
まあ、どっちにしろ面白くないよ悪いけど。
2chだからって無理して道化を演じなくてもいいんだよ。
20年前30年前ならわかるけど、まさか2017年にもなってネットの掲示板に書き込むことが
君にとって非日常なのか?w
2006年からC#スレにいる奴にとってはもはや日常を越えてるよな
staticおじさんは小難しい仕組みを延々と語ってたけど
俺は単純にメンバ変数がグローバル変数化するのが嫌でクラス使うのやめた
>>949
インターフェースのメリットを説明できないからそういうレスするんだよね
なにも作れないから言語の機能だけ覚えて身を固めたんでしょ?
説明をさせるとメッキが剥がれちゃうんだよね? 相手も想定してないのにインターフェースなんて意味ないって
誰に提供したいインターフェースなの?
ただ趣味で作ってるゴミコードなんでしょ?
あ、usingがメリットとか言ってたっけ?
アレのどこがメリットなんだよ
使うたびに実装できてるか中身確認しねーと解放できてるかもわかんねーじゃん
しかも明示的に実行されてるのかどうなのか見えなくなってるし
>>952
> あ、usingがメリットとか言ってたっけ?
> アレのどこがメリットなんだよ
> 使うたびに実装できてるか中身確認しねーと解放できてるかもわかんねーじゃん
> しかも明示的に実行されてるのかどうなのか見えなくなってるし
詳しく >>953
ブーイモじゃ嫌
でもusingが動いてるかどうかどうやって確認する? 普通にDispose書いたときに
Disposeが正しく動いてるかどうかを確認するのと
同じようにすればいいんじゃね
しらんけど
>>954
インターフェースのデメリットを説明できないからそういうレスするんだよね
なにも作れないから言語の機能だけ覚えて身を固めたんでしょ?
説明をさせるとメッキが剥がれちゃうんだよね? >>954
usingなんてシンタックスシュガーなんでdisposeコードは自動展開されている。
逆コンパイルしてILコードでも見とけ。 >>957
それ、わかりやすいコードなの?
解析が困難になってない? >>959
そこは、それ食べられるの? 美味しいの? だろ。
美味しいかどうかはわからんがCLRは食うぞ。 >>960
(*゚∀゚)bブーイモは期待通り駄目だな クラスの継承だと一個しか継承できないじゃん。
機能が被ってるけど親子関係にはないクラス作りたかったらそれぞれに同じ機能実装しないとダメじゃないの?どうやるの?
それぞれで実装しないといけないのはどっちでも同じだけどインターフェースがないと親子関係にないクラスに同じ機能があることを明示できない。
おまえ、.NETのライブラリがインターフェースだらけだと知って
インタフェースはイラネって言ってるのか?
>>965
どういうケースもクソもないだろ。
インターフェースってそういうもんだろ?
インターフェース使えば親子関係にないクラスでも同じ機能のメンバに同じ書き方でアクセスできるようにできるぞ。 >>966
みんなが使うライブラリならインターフェース使ってもいいけど同じチーム内でしか使わないならそんなのいらないらしい >>966
企業が全体に提供するものは有りだと思ってる
インターフェースを提供する側と使用する側が明確じゃん
ドキュメントも割りとしっかり書かれるだろうし
サンプルソースもあれば
テストもしっかりされてる
でも人売り派遣プロジェクトではコミュニケーションコストが上がるだけなので無駄
10人以内のプロジェクトでは無駄ぐらいに受け取ってくれていい >>968
ユニットテストでモック使うときはインターフェース使うけどね。
奴隷派遣の戦場ではインターフェース不要は認める。 要するにインターフェースいるか要らんかは条件次第なのにインターフェース自体要らん(と言ってるように聞こえるようなこと)を言い出したそいつが諸悪の根源ってこと。
俺が理解できないものは使わない ← これは正しい
俺が理解できないものは要らない ← 単なるおバカ
>>971
いや、大手ライブラリ提供側なら使ってもいいってだけで
メリットはさっぱりわからん
いらないんじゃない? javaの様にinterfaceにトレイトを入れれば?
ジャップを以外に人売り派遣C#ユーザーなんかいねーから問題ねーだろ
>>973
メリットはクラスになにかしらの共通の機能を次々と簡単に付加できること
そしてその機能を持ってるクラスのオブジェクトをまとめて処理可能 interfaceは必要なメンバーを持ってるよという印なだけで
機能追加は別な話
どっちでもいい
例えばINotifyナンチャラとか付ければ簡単に新しい機能を付加できるしその機能があることをプログラムが知ることができる
>>980
別だとしてもその実現の過程でインターフェースは必要になる
機能をペタペタ付加したいなら基底クラスの継承だけで共通化するより簡単になる >>982
え?別にいらないし俺は
お前しか使ってないんだからお前が説明しろよw >>972
ww
まあよくいるけどね
そう言う人達 >>984
初心者ならインターフェイスは不要
if使ってクラスごとに場合分けして書けば対応できる
この書き方が冗長だと感じたときに必要になる >>986
昔はそういうのもあったかもしれんけど
今は明示的に書くことのわかりやすさの方を優先してるから
ゴミにしか見えないや >>952
これインターフェイス関係なく普通の継承でもそうじゃん
StreamのDisposeを使うときはあらゆる実装を確認するのかな staticおじさんは直ぐに意固地になる
神が人間クラスにstaticおじさんインターフェースをimplementsした上、加齢により意固地になるメソッドに実装書かれたから
>>991
だから企業が提供してるなら有りって言ってんじゃん
でも手作りならやめるべき >>993
ほんと中途半端な実装は迷惑だよね。
中身を見て殺意を覚えるようなのがあるよ。 >>994
お前が自分はそうじゃねぇって思ってるならその考えを改めるべき \
 ̄ヽ、 _ノ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
`'ー '´
○
O
,r"´⌒`゙`ヽ
/ , -‐- !、
/ {,}f -‐- ,,,__、) と思うゴリラであった
/ / .r'~"''‐--、)
,r''"´⌒ヽ{ ヽ (・)ハ(・)}、
/ \ (⊂`-'つ)i-、
`}. (__,,ノヽ_ノ,ノ \
l `-" ,ノ ヽ
} 、、___,j'' l
やけに盛り上がってると思ったらおじさん湧いてたのかぁ
>>999
同一人物か?
いくつ端末持ってんだ?
ガイジ過ぎるw lud20210127032702ca
このスレへの固定リンク: http://5chb.net/r/tech/1510056685/ヒント:5chスレのurlに
http://xxxx.5ch
b.net/xxxx のように
bを入れるだけでここでスレ保存、閲覧できます。
TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像
↓「ふらっと C#,C♯,C#(初心者用) Part133 ->画像>2枚 」を見た人も見ています:
・ふらっと C#,C♯,C#(初心者用) Part143
・ふらっと C#,C♯,C#(初心者用) Part138
・ふらっと C#,C♯,C#(初心者用) Part144
・ふらっと C#,C♯,C#(初心者用) Part141
・ふらっと C#,C♯,C#(初心者用) Part141
・ふらっと C#,C♯,C#(初心者用) Part140
・ふらっと C#,C♯,C#(初心者用) Part136
・ふらっと C#,C♯,C#(初心者用) Part142
・ふらっと C#,C♯,C#(初心者用) Part132
・ふらっと C#,C♯,C#(初心者用) Part145
・ふらっと C#,C♯,C#(初心者用) Part135
・ふらっと C#,C♯,C#(初心者用) Part139
・ふらっと C#,C♯,C#(初心者用) Part134
・ふらっと C#,C♯,C#(初心者用) Part137
・ふらっと C#,C♯,C#(初心者用) Part131
・ふらっと C#,C♯,C#(初心者用) Part146
・ふらっと C#,C♯,C#(初心者用) Part148
・ふらっと C#,C♯,C#(初心者用) Part148
・ふらっと C#,C♯,C#(初心者用) Part150
・ふらっと C#,C♯,C#(初心者用) Part147
・ふらっと C#,C♯,C#(初心者用) Part128
・ふらっと C#,C♯,C#(初心者用) Part155
・ふらっと C#,C♯,C#(初心者用) Part156
・ふらっと C#,C♯,C#(初心者用) Part121
・ふらっと C#,C♯,C#(初心者用) Part151
・ふらっと C#,C♯,C#(初心者用) Part157
・ふらっと C#,C♯,C#(初心者用) Part119
・ふらっと C#,C♯,C#(初心者用) Part149
・ふらっと C#,C♯,C#(初心者用) Part129 [無断転載禁止]
・ふらっと C#,C♯,C#(初心者用) Part120 [無断転載禁止]
・ふらっと C#,C♯,C#(初心者用) Part130 [無断転載禁止]
・ふらっと C#,C♯,C#(初心者用) Part127 [無断転載禁止]©2ch.net
・ふらっとC#,C♯,C#(初心者用) Part88
・ふらっとC#,C♯,C#(初心者用) Part92
・ふらっと C#,C♯,C#(初心者用) Part160 (874)
・ふらっと Q#,Q♯,Q#(初心者用) Part 1 (10)
・くだすれC++/CLI(初心者用)part2
・【キンスレ】キングスレイド初心者用スレpart1【初心者】
・Webサイト制作初心者用質問スレ part251
・初心者用・人形の素朴な疑問Q&A Part18
・Webサイト制作初心者用質問スレ part239
・Webサイト制作初心者用質問スレ part248 [無断転載禁止]
・ふらっと C#,C♯,C#(議論用)
・教えて、鯖管理の仕方(初心者用)
・【キンスレ】キングスレイド初心者用スレpart3【初心者】
・くだすれFORTRAN(超初心者用)その6
・FX初心者スレ Part113
・MTB初心者質問スレ part103
・人狼ジャッジメント初心者スレ part13
・Java入門・初心者質問スレ(ワッチョイなし) Part.8
・FX初心者スレ Part122
・FX初心者スレ Part104
・FX初心者スレ Part120
・FX初心者スレ Part105
・FX初心者スレ Part109
・FX初心者スレ Part129
・MTB初心者質問スレ part106
・【FF14】初心者の館 Part323
・ロード初心者質問スレ part443
・くだすれDelphi(超初心者用)その16
02:44:25 up 3 days, 13:08, 0 users, load average: 9.56, 9.65, 9.96
in 0.031804084777832 sec
@0.031804084777832@0b7 on 121516
|