■過去スレ C#, C♯, C#相談室 Part90 http://echo.2ch.net/test/read.cgi/tech/1455160063/ C#, C♯, C#相談室 Part91 http://echo.2ch.net/test/read.cgi/tech/1467142749/ C#, C♯, C#相談室 Part91 (実質Part92) http://echo.2ch.net/test/read.cgi/tech/1467211515/ C#, C♯, C#相談室 Part92 (実質Part93) http://echo.2ch.net/test/read.cgi/tech/1485589613/ C#, C♯, C#相談室 Part93 (実質Part94) http://2chb.net/r/tech/1492818720/ >>1 ここは、実質Part95だったorz C#でセレニウムにチャレンジしています。 Chromeを起動すると「Chromeは自動テスト ソフトウェアによって制御されています」と メッセージが表示されてうざいです。 これを非表示にする方法はないでしょうか?
「練馬350 る 8 08」 〜〜〜〜〜〜〜〜 DQN運転手につき注意! DQN運転手につき注意! DQN運転手につき注意! DQN運転手につき注意!
質問です C# の struct で 引数無しのデフォルトコンストラクタを上書きできないのはなぜでしょう? 回避方法はありますか? public struct Hoge { public int a; public int b; public Hoge() { this.a = 123; this.b = 456; } } みたいなのがやりたいです
public struct Hoge { public int a = 123; public int b = 456; } でだめ?
暗黙的な既定のコンストラクタが挿入されないようにとのC#コンパイラの最適化の都合 特に回避策はない 標準ライブラリで struct Vector3 { ... public static Vector3 Up = new Vector3(0, 1, 0); } みたいなのはある
レスくれたひととワッチョイ似てるけど別人です念のため
>>13 あまり有難みが無いですが・・・とりあえずレスくれたみなさんありがとう class にしたくない理由は struct のネストをしたいのと そのとき struct を Marshal.StructureToPtr して使いたいのですが ネストの内側に class が含まれてると not blittable とか出て困ってるんです 外側がクラスでも良いならラップするクラス作れば良いだけだけど
すみません間違いました not blittable が出るのは struct s2 の中に class c1 があるとして GCHandle h = GCHandle.Alloc(s2, GCHandleType.Pinned); IntPtr ptr = hndl.AddrOfPinnedObject(); // ptr を利用 h.Free(); ちなみに struct s2 の中に struct s1 があるとして 同じことをしたときは問題無いです
>>18 struct を定義するときにメンバに class があるとき その class を blittable にする方法を知りたいです そのclassの内容によるとしか… 無制限にマーシャリングできるわけでもないし classのメンバがblittableならそのままstructにすりゃいいだけだけど 参考になるか知らんがstringを含む場合 [StructLayout(LayoutKind.Sequential)] struct Foo { public int id; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string name; } class Program { static void Main(string[] args) { var sizeInBytes = Marshal.SizeOf<Foo>(); Console.WriteLine($"SizeOf={sizeInBytes}"); var coTaskMem = Marshal.AllocCoTaskMem(sizeInBytes); var foo = Marshal.PtrToStructure<Foo>(coTaskMem); foo.name = "John"; Console.WriteLine(foo.name); Marshal.DestroyStructure<Foo>(coTaskMem); Marshal.FreeCoTaskMem(coTaskMem); } }
>>21 そもそも内側は struct で充分なんですが 初期値を入れたいのでそのためには class でないといけないとしたら class にするとエラーになるのでやっぱり困るっていう話です struct でデフォルト値入れられないと割り切れば済む話です 2度手間っていうか面倒くさいけどStructureToPtrでバイトストリームに一括で変換するのが 目的ならば、外に見せる部分はclassで作っておいて中にstructを定義する structの要素にはプロパティでget/setする初期値はclassのコンストラクタで設定 classにバイトストリームを取り出す(StructureToPtrに絡むロジック)メソッドかプロパティを 定義するみたいなのじゃダメなのかな class point { public point () { x = 0; y = 0; } private _point _Struct; public int x { get { return _Struct.x; } set { _Struct.x = value; } } public int y { get { return _Struct.y; } set { _Struct.y = value; } } public byte[] bytestream { get { return structToPtrFunc(_Struct); }//メソッドは別途作成 } [StructLayout(LayoutKind.Sequential)] private struct _point { int x; int y; } }
むしろ StructureToPtr を使いたくないっていう話です やりたいのはこっちです GCHandle h = GCHandle.Alloc(s, GCHandleType.Pinned); IntPtr ptr = h.AddrOfPinnedObject(); // ptr 操作 h.Free(); 途中のレスで一回変な事を書いてしまったので混乱させてごめんなさい
意図がそれならそもそもなんで親に値型使ってんのってところまで後退しちゃうぞ 値型にGCHandleのピン付けってそこだけ見ると意味不明だし 省略している「ptr操作」の内容次第では初っ端からアプローチを間違えてる可能性がある
Cの構造体って構造体の中に別の構造体入れてもコピーが発生する訳じゃない (子の構造体をいちいち作る訳じゃないから) C#をCと同じと思わない方が良い
>>28 C#の場合、classは、Heapに実態を確保して変数は参照型で、 structは、スタックなどに実態を確保して、変数は値型だと 聞きました。 C++は、strucとclassは、protected/public などのaccess control以外に 違いが無いこととは対照的です。 というわけで、C#の場合でも、structに関しては別のstructの中に入れた場合 は、C++と同じような動作なのではないかと思われます。 そもそも、「無駄なコピー」ってのがどんな想定なのかわからん
質問いいですか? C#のアセンブリの読み込みってどういう手順で行われてるんですか? 同じバージョンの.net core から.net coreを呼び出してるのにTypeIntializationExceptionが発生します たぶん正しいアセンブリが読み込めてないのだと思うのですが、アセンブリの読み込みタイミングやバージョンを指定することは可能なのでしょうか
上のお話見てると突き詰めれば値型と参照型の定義の問題になってきそう C#の構造体は中に値型以外を詰め込むとその部分はCレベルで言うポインタのポインタを保持する形になってコピー時の挙動以外はclassと大差ないものになっちゃうよね ポインタのポインタの値型だと言えばそうなのかもしれないけど
>>31 単に静的コンストラクタ内で例外が出てるだけじゃね? 例外型だけじゃなくて例外メッセージやスタックトレースも読んで 参照してるdllにエントリポイントがないと言われるだけでそれ以上検索してもなにも出てこないです こう聞いた方がいいのかもしれないです .net frameworkの時は自前でシステムのアセンブリ参照できましたが .net coreにも似たような仕組みはあるのでしょうか こういうアセンブリ関係の問題は.net frameworkの時は自前で参照加えたらできたんですけど .net coreになってフレームワーク二つしか選択肢がなくなって細かい参照が出来なくなってますがそれはどこがどういう風に解決してるのでしょうか? 特定のライブラリが使いたいというよりそこら辺の内部仕様が知りたいです
あ、アセンブリが読み込めてないと思った一番の理由はdllでなくプロジェクトにcsで組み込んだらちゃんと動いたからです そういう意味で言語レベルでのミスはないです
csc -reference:(.NetCoreのpath) hoge.cs でいけるよ
WindowsFormで写真データ取り込みを作ってるんですが、 DriveInfo.GetDrives()してもWindows10に接続して認証したあとの iPhoneのドライブが読み取れず・・・ どうにか拾えないもんでしょうか?
あれは普通のディスクとしてマウントされてるわけじゃなくてメディア転送プロトコルってやつだから、 それじゃアクセス出来ないと思う。
カレントディレクトリに \data¥ というディレクトリを作成したいのですが、 どうすればいいのでしょう?
>>42 できました。ありがとうございました。m(_ _)m 機器構成の設定を記載したconfigファイルをアプリ上で作成して、 アプリ実行時にconfigの内容を変数に読み込むことを行おうと思ってます。 configファイルって普通どんなふうに書くんだろうと思って、 あるアプリのconfigファイルを覗いてみたところ下のような感じになっていました。 [Config] StartUpLeft=-2147483648 StartUpTop=-2147483648 StartUpWidth=640 StartUpHeight=480 SaveWindowPosSize=1 SaveWindowRectLeft=597 SaveWindowRectRight=3645 SaveWindowRectTop=1256 SaveWindowRectBottom=3436 SaveWindowMaximize=0 このテキストファイルを string line = sr.ReadLine(); // 読み込んだ一行をカンマ毎に分けて配列に格納する string[] values = line.Split('='); とすると偶数のvaluesに値が入ってるからこれを使用するみたいな感じでOK? 〇〇できちっと書けやぁ!みたいな形式があったら教えて下さい。
>>45 ググってみましたが難しい・・・。 アプリ内で変数を10個ぐらいもっていて int hoge1=100 int hoge2=12 等 これをテキストファイルに保存し、必要なときに int hoge1=100 int hoge2=12 にアプリ内で戻したいのですが、簡単に実現出来る方法があればいいなと思ったのですが・・・。 >>44 その形式は ini ファイルなので C# ini ファイルでググれば事例がいっぱい出てくるよ 基本はWin32APIのGetPrivateProfileString( )とかを使う もし設定ファイルの形式をこれから決められるならjsonおすすめ DataContractJsonSerializerクラスを使えば読み書きも簡単だし まずアプリケーション構成ファイルを検討するべきだと思うんだが
なんかどんどん難しくなってきました。 最近だxmlで書くのがデフォルトなんでしょうか・・・。 iniで書くのも結構荷が重い、気合い入れて勉強するべきか・・・。
いまだとjson以外で書くことないな。 どんなプラットフォームでもjsonはサポートしてるし、どんなものでも入れられることがわかってるしね。
ものによるやろ。xmlで書くこともあるし、もちろんjsonも。yamlだって最近は多いでしょ?
xmlはめんどくさすぎるから、DTDでちゃんと定義したいとかじゃなかったら使いたくないな。もちろんケースバイケースなのはそうだけど。 改行区切り、タブ区切りとかもまだまだ場合によっては使うしね。
カンマ区切りと固定長のまざった独自糞フォーマットでのIO書いたことはあるけど、自由に出来る時はjsonかxml 大体はjsonだけど、きちんと定義したデータ使いたいときにRelaxNGで定義してXMLで書いたことはある。
些細な枝葉で悩む時間あったら 本体のプログラムで悩め
プログラマーはつい余計な事まで調べてしまう生き物なのです
調べるのはいいが掲示板で最初から聞くのは違うな そしてどうでもいいことにこだわり始めるのはだいたい行き詰っているとき
global::クラス名で 2つがバッティングしてます 外部からのdll2つなんで namespaceつける等の変更できない どう解決できる?
global::ファイル名.クラス名 とかできない?
ちょっとくだらない質問で申し訳ないんだけど 構造体の定義のソースってどうしてる? クラス内に通信電文用の構造体をいっぱい作ったのだけど ソースがでかくなっちゃうからpartial使ってわけた方がいいのか あくまで一個のソース内にまとめるか・・・
どれくらいでかいのかわからんけどあんま分けないかなー? 1万行超えるとかなら分けること考える
分割しようかと迷う規模なら分割もありだと思う。 ベース部分は独立させて、機能毎に実装ファイルの頭に使用する下位レベルの電文を定義する。 電文は全部まとめるか?分割するか?ケースバイケースだね。
クラス内にネストさせるんじゃなくて 下位の名前空間作ってそこに構造体群を置けばいいよ
>>68 クラス内に作らないで独立させれば良いのでは? だいたい >>73 方式で、基本的には ファイル名 = クラス名 を目指すな。自分は。 xamarin でTDDを勉強してるんだけど、 public event PropertyChangedEventHandler PropertyChanged; この PropertyChanged 自体がnullになって例外で終わるのって どういうパターンがあるんだろう・・・。 勉強したいことと全く別のところで長期足止め。わっけわからん状態。
>>76 ハンドラが1こも登録されてないとnullなんじゃないかな >>77 やめろよ、普通の質問なのに。 Xamarinの話題も良いじゃん。 ここで質問するより 直接ちょまどにツイートしろって意味かな? 返事来るかどうか知らんけど
>>78 ありがとう。どうやら「どっかが+=してくれる」っていう前提なんだね、これ。 PropertyChanged?.invoke(this, e); で呼び出したら動いた。現役じゃなくなって長いもんで(趣味のプログラム)、 このへんの書き方に苦労するなあ。 >>81 null条件演算子が出来る前はeventに空のdelegateを代入しておくテクニックがあった public event PropertyChangedEventHandler PropertyChanged; = delegate {}; >>82 あ。やっぱそうなんだ。「これ、ダミー関数入れときゃエクセプション 投げられないで済むんじゃねえのか?」って思った。 ところで1つ目のセミコロンて要るの? フォームアプリで フォームAで検査をして、検査終了後に 「データを記録しますか?」 「はい」「いいえ」 というウインドウを表示して、 「はい」ならデータ記録 「いいえ」ならデータ廃棄 としたいです。
データはフォームAにあるので、 1. フォームAからフォームBを開く 2. フォームBは「はい」「いいえ」を戻り値としてAに渡す 3. フォームAでデータ記録、データ廃棄の処理を行う みたいな処理でいいのでしょうか? それとももっとよいやり方がありますか?
ありがとうございます。 これですね。 なんかフォーム新たに作るとかこんなめんどくさいことしなきゃいけないのか? と疑問に思ってたんですが、聞いてよかったです。 ありがとうございます。 明日実装してみます。
C#からpythonのプログラムをコマンドライン引数hoge付きで実行したのですが、 System.Diagnostics.Process.Start("python.exe", @"""L:\main.py hoge""") とやっても実行できません。 なにかより方法ないでしょうか?
なぜスクリプトファイル名と引数をダブルクォートでひとくくりにしてる?
>>91 分けて書いたら第3引数は取らないとエラーが出たのですが、 どう書けばよいのでしょう? System.Diagnostics.Process.Start("python.exe", @"L:\main.py hoge")
>>93 ありがとうございます! 解決しましたm(_ _)m var sb = new StringBuilder(); var c = 'a'; while (true) sb.Append(c); これで一番下の行に破棄'_'を使用っていうVSによるヒントが出てくるんだけど、 こういう場合の破棄って使用する場合としない場合でどういう違いがあるの?
>>96 破棄は、未割り当ての変数と同等です。つまり、値がありません。 破棄変数は 1 つのみであり、破棄変数には記憶域も割り当てられないため、破棄を使用するとメモリの割り当てを減らすことができます。 また、コードの意図がわかりやすくなるため、読みやすさと保守性が向上します。 linqて出た頃はselectとか予約語になってたはずだけど、今は使わん方がいいの?
LINQやクエリ式を連想するからやめといた方がいい
あくまでコンテキストキーワードだから当初から識別子として使えたよ group辺りは変数名として割と使う
groupって変数名としてほとんど何の情報も持たないし普通にバッドネーミングでは GroupTheoryのGroupとかの専門用語でもない限り
>>101 右辺から意味がはっきりしてる寿命が短いローカル変数ならいいんじゃない?それこそlinqのグループバイの戻り値とか。まぁそんなんだったらgとかにしちゃうけど LINQの話題になってるから聞きたいんですが、LINQって結構遅い? ベンチマークとって襲いって主張してるブログとかはあるけど、実業務で遅さを実感する事ってどのくらいある?
LINQ使わないで書くよりも遅いことは遅いんだけど、経験的にはあんまり問題にはならなかった 実際に使ってみてどうしてもLINQ使ってる辺りでネックになるようなら、 そこだけ書き直す感じでいいと思う
Linq使ったほうが楽に高速化できることもあるし、場合場合じゃないかな。 PLINQは良くコア数指定せずにぶん回して「遅い」って言ってる奴いるけど、コア数指定したら割と良い線行く。
処理速度が求められるような部分だとネックになってると感じることもある シミュレーションみたいなのね そういうの以外では全く気にならない どうせ処理速度より通信やファイル読み書きのほうが圧倒的に時間かかるから
linq to sqlだと気付かずにクエリがクライアント側で行われるなんてことが無くはない
ループのコストを気にするレベルの処理(数値計算とか)だとLINQは遅いが 大半の処理は0秒の範疇で終わるし遅さを実感できるタイミングは少ない
むしろ普段使いこそLINQ ガチで組むときだけ使わない
ほぼC#経験しか無いのですが、最近iPhoneでアプリ作りにトライして貰いたいと言われました 経験的にC#とXamarinで作れたらと思うのですが、実用に耐えるものなのでしょうか? 王道のSwiftを覚えるべきでしょうか オススメをお聞きしたいです
産まれながらに豪運をお持ちであるか 最終的に開発するアプリがごく小規模でないのなら、Swiftを薦めるかなあ ネイティブのクロスプラットフォームフレームワークって機嫌よく動いているうちはいいんだけど いざトラブルが起きた時、フレームワークそのものの知識と目的のプラットフォームの知識、両方がないと問題を解決できないのね
iOSの事はあんまりわからんけど、Androidの場合でも、結局Androidの記事を読むことになるから、ネイティブの知識は必要になるよ。 だから逆にネイティブの知識で何とかなるXamarinは好きなんだけど。 ネイティブに対してLinqが書けたり、C#のライブラリが使えるメリットを感じられなければ、ネイティブの方が良いと思う。 俺はサーバ側もc#で済ますときに圧倒的に楽だし、Linqめっちゃ使うし、LiteDBとか使いたいからXamarinは割と選択肢にしてる。 気持ち悪いとか、信者がどうとかそういう話に持ってくのはやめてほしいわ。
やはりネイティブで慣れた上が無難ですかね 情報量はネイティブのが多いのは確実でしょうし アドバイスありがとうございます
docker使うときって、 単一バイナリビルドしてalpineイメージに乗せる、 普通にビルドしてdotnetイメージに乗せる どっちがいいんだ
winforms で webview2 の source プロパティ設定しても表示されないんだけどなんでか教えてくれさいエラーは出ません
NAudio.Lameがサンプルレート44100&16bit以外のwavをmp3に変換できないのってなんでなの? lame_enc.dllのラッパー作ったらこっちではどんな形式のwavでも変換出来たからまぁ問題は解決してるんだけど上記じゃできない理由が知りたい
Visual Studio インストールできない環境なんですが、csc でコンパイルはできます。 using SpeechLib を使うためにはどのファイルを /r: で指定すればいいんですか? Microsoft スピーチ SDK はインストールされています。
>>125 ゆうちゃんがしていた方法じゃん SharpDevelopをお勧めしますけどね tlbimpでsapi.dllからマネージDLL作ってそれを参照 かね msbuildも使えるだろうからcsprojでCOMReference要素使った方がいい気がするけど
VisualStudio が大きすぎて重すぎてインストールさえできないんです ( ノД`)…
>>129 PC買い換えろや インストールすら不能ってそれじゃVisualStudio以外のことするのもきついだろ VS入らないマシンにリモートデバッガだけ入れて、VS入るマシンから開発すれば?
個人的にはVisualStudioかVScodeが使えなかったらC#は使わないだろうな それらのサポートがあってこそ楽できるC#だと思ってるw >>132 最初からVS入るマシンでやれよw メモ var environment = Microsoft.Web.WebView2.Core.CoreWebView2Environment.CreateAsync(@"C:\Hoge\Homo\Microsoft.WebView2.FixedVersionRuntime.87.0.664.8.x64"); await webView21.EnsureCoreWebView2Async(environment.Result); webView21.CoreWebView2.Navigate("http://www.google.com" ;); EnsureCoreWebView2Asyncをawaitするならenvironmentもawaitすればいいのに
VisualStudio 2019 入れても SpeechLib 使えんかった。 まほろばサイトの通りにしてもエラーで .exe 作れなかった。 まほろば の環境に合わせて VisualStudio 2010 入れるしかないのか。 VS2010 手に入れられるのか? メンドクセー
string.Createでの書き込み先ってゼロクリアされた状態なのが仕様?
> The initial content of the destination span passed to action is undefined. > Therefore, it is the delegate's responsibility to ensure that > every element of the span is assigned. Otherwise, > the resulting string could contain random characters.
>>139 そう書いてる割には渡されたSpan<char>をループで回してみると0オンリーなんだよね これはプログラム立ち上げたばかりで余ってるヒープから確保されたものではなく、メモリ確保とセットになってるからってことかな? debugとreleaseでメモリの初期値が異なるのって.NETもそうだっけ?
鬼滅のこのキャラを c# プログラマーの上司にしたい。 責任まできちんととってくれるなら、理想の上司ではある。
ソフトウェア開発において絶対正義は絶対存在しないので無理です そのマンガのキャラみたいな台詞は顧客に向かって言うべき
List<T>で要素数30億個が必要になった しかしList<T>のインデックスはint32なので普通には無理 サードパーティ製のLargeList<T>を使えば80億までは行けると聞いて試したらList<T>の倍以上の時間がかかるから使えない なんかいい手がないですかね?
30億個必要な設計を見直す 1億×30個じゃダメな理由でもあんの? そらそんな個数必要なら時間もかかるだろうよ
・本当にList(ArrayList)が妥当か? ・どうしてもC#でやらなければならないか? をまず考える
30億のインデックスが必要という案件自体に なんか無理がありそうな気がしますがね… データが固定長ならば 30億xデータ長のファイル用意して ランダムアクセスすれば比較的容易かも キーが1〜30億の間の数値というだけで、 データ個数がそこまで無いならDictionary データ30億個ガチで必要かつ可変長やソートが必要なら LiteDBみたいな外部DB使うとかしないと現実的じゃない
C++のマクロが欲しすぎる コードジェネレーターってコレじゃないんだよ…
コードジェネレーターはあらゆることができるけど手軽さは無いね
System.Runtime.Intrinsics.X86っていう面白そうな標準ライブラリ見つけたが ストリーミングSIMD拡張命令を扱う割にはVector256とかに吐き出してレジスタだけで済ませられないからパフォーマンス目的で使える訳じゃなさそうだな
>>155 具体的にどういう使い道ありそう? ポインタからロード → ポインタへストア、これが出来ればコピーを4倍速で出来そうなもんだけど この間にstructへ吐き出し(スタックへ書き込み)が混じると利点が台無しになってないか? 今から本番稼働想定したasp.net書く場合.net5は避けた方が良いのでしょうか?サーバーはコンテナ稼働想定してます。
別にいいと思うよ .NET6がでたら乗り換えるだけ コンテナということは高頻度で更新するんでしょう?
西村博之 「10年くらい前にMSがC#っていう言語をリリースしたんですよ。その時は「これからはC#の時代だ!」ってみんな言ってたんでけど今はもう誰も使ってないんすよねw」 元WEB系から見たらこんな印象なんだな 文字列の関係からweb系からは程遠い言語ではあるけど、そろそろutf8string実装して見返してもらいたいわ
俺も見てた perlと同じ扱いされてたな さすがにちょっとだけ反論でてて一言謝ってたけど
Unityでめっちゃ使われてるからゲームだとC#だらけってイメージ
>>161 嘘を嘘と見抜けない人にはネットを使うのは難しいって言った人間だぞ こいつの言う事はすべて嘘だと思っておくべき C#がリリースされたのは約20年前 つまり西村の時系列が10年ズレてると考えたら、2010年前後のC#はデスクトップ開発専用言語でありスマホWeb時代の到来によりオワコンって評価だったからそういう認識になるのも分かる 実際はその後マルチプラットフォーム対応やUnityでの採用により今では上位で健闘してるが
Web系の人は世の中にWeb系以外存在しないと思ってるからね HTML、CSS、JS、PHPを勉強してプログラマー転職とか言ってる胡散臭いイメージの方が強いんだけど
C#の作者がTypeScriptに行っちゃって あっちの方が進化が早い気はする
どんな変遷だろうが知りもしないことをのたまったのは変わらんのだからフォローにならんぞ
C#の作者ってDelphiの作者だよな どこまで行くんだ
TSは型システムが自由度高くて契約プログラミングの立場から見ると魅力的なんだが、 いかんせん記法が複雑すぎて黒魔術化するケースがしばしばある その点C#は見た目素直で扱いやすい でも判別共用体と型クラスははよう実装してくれ
>>172 まぁ、そうだな、どうしてもってんなら考えてやってもいいな でも、それが人に対する頼み方か? 頼み方ってもんがあるだろ? null許容参照型とオブジェクト初期化子って相性悪すぎでは? 昔のコードをコンストラクタ初期化に変更するのめんどくさい
null許容参照型自体が微妙 null許容参照型の動機は立派だし尤もだと思うが既存の言語仕様やコードに馴染まない 導入するならC#8.0未満との互換性を切り捨てるくらいの覚悟でやるべきだった
むしろもっと積極的に警告なんかじゃなくエラーにするぐらい厳しくnullチェックしてほしい
この言語進化もしつつ、後方互換も残しつつよく頑張ってきたけどそろそろ限界なのかもね ヘルスバーグさんがtsの方いっちゃってからはどういう人が方針決定したりしてるんだろう。
>>180 なんか君と絡むとめちゃくちゃめんどくさそうな予感 この言語が好きなのは分かる。俺もこの言語が好きで付き合いも長い。 しかし、言語は宗教ではない。 長所も短所もあるし、作るものによって合う合わないもある。 そして大抵の場合新しく出た言語の方が優れている。 ゲームを除いていまからC#学ぶ人は少ないんじゃないかな… 最盛期は過ぎてるよ。 そら後から劣化版なんて出しても意味ないんだから基本的には優れてるだろ ただ新しく出された言語が広まるかはわからんし、何が広まるかの予測も難しい ちょいと昔にはスクリプト言語は死んで関数型言語の時代になるって主張はよく見た気がするけど未だにそんな時代来そうにない 現状、ある程度広まっているものを学ぶ価値は十分にあるでしょ 完全新規ならjsやpythonでいいんじゃね?っていうのはわかるがC#は無いと強くいい切るのはまだ早いように感じる
> 完全新規ならjsやpythonでいいんじゃね?っていうのはわかるが それはわからない スクリプト言語では代替にならないし後から出た言語でもない 後方互換に限界が見えるだけであって C#が限界なんて主張してる奴は何も分かってない
新規にプログラムを学習する人の話なのに何の代替が必要なの? C#の代わりに学ぶべき言語の話なんかしてないぞ 後から出た言語を学ぶべきなんて主張もしてない
JSやPythonに比べるとC#のほうが新しいし高機能だからね もう少し新しいSwift、Rust、TypeScriptあたりと比べてみるといいと思う Swiftはいろいろ評判悪いところあるけど言語の機能としては学ぶべきところがたくさんある .NET言語ならF#
>>184 新規で勉強すべき言語も少なくともJSやPythonではないから論外 C#と比べるならKotlinだな Swift、TypeScriptは知らんがRustはC#と比べるには低レベルすぎるしF#は現状ジョークみたいなもんだと思ってる
文字で記述するのを数式だけにして あとポトペタとかラダーブロックとかで組み上げるようには出来んかね? 言語で思考する人が作れば、どうしても文法ありきのものしか生まれない
組込み機器の言語は未だにCがメチャ多いな。 ルネサスの開発環境見ればわかる。 組込み機器の操作パネルにラズパイを良く使うが、pythonだな。 windowsで操作パネルやるときはC#にするわ。
>>188 言語で思考しない奴は人間ではない >>189 一般的に言って組み込み機器は環境がプアだからな pythonなんて使えばimport文読み込むだけで数秒は掛かる mruby の本が出た Webで使えるmrubyシステムプログラミング入門、近藤宇智朗、2020/11 宇宙開発などの組み込み用、MicroPython, Lua, Squirrel の代替になる。 Ubuntu 18.04, C99 対応 人工衛星イザナギ・イザナミで、使っている
c言語の知識しかない人が 10年前に新しい言語を学ぶとしたら DelphiとC#どっちを選ぶだろう 今、新しい言語を学ぶとしたら C#とTypeScriptどっちを選ぶ?
KotlinのC#版作ってほしいなあ C#と100%相互運用可能で、変数の再代入可否がvarとvalで書き分けできて、 レガシーになってしまったC#の文法(delegateとかC的なswitchとか)を全部そぎ落としたようなやつ ネーミングは・・・K#とか?
後方置換無くすとしたら .net5が最後のチャンスだったんではなかろうか このままズルズルと古い言語のイメージを払拭できず 人口は減り続ける
互換切るくらいだったら新言語作ってくれた方がいいな
互換切られたVB6はどうなりましたか? VB.NETやってますか?VB6続けてますか? どっちも終わりましたね BASICは終わったのです
>>195 じゃ、今はdelegateを使わずにどうやってメソッドを呼んでるんだ? 代替手段あったっけ? >>199 VBは完全に終わればいいのにな VBの文法が貧弱なのは公知の事実で VB上がりのプログラマは変なクセがついてしまって 他の言語に移行したときに変なコードを書く もちろん俺もVBで書くこともあるがマスターする気はサラサラない 10年以上前からいつか廃ると思ってるからな 去年MicrosoftがExcelでのマクロなどを Pythonにするとかいうニュースが流れたがガセだったんかな >>202 そのニュースホントに去年? OfficeのマクロをPythonにするの撤回してJavascript積むって発表したのが2018年末だよ その後またPythonにすることに決めたってこと? >>204 聞いたことないの?結構話題にはなったけど web版のofficeのアドインはjavascriptで組むんじゃなかったっけ C#で書いたデスクトップ版のアドインをweb版で使えるようにするにはjavascriptで書き直すしかないのかね
今年後半発売予定のOffice 2021に期待やで。
ノーアロックCOM呼びを実現するためにマニュアルマップインターフェースstructを丸一日かけて実装したぜ… オブジェクト指向の偉大さが身に染みたわ
Googleのスプレッドシートはjsでマクロ組めるし、それに倣ったのかな どんな言語でも構わんけどVBAの開発環境はいいかげんマトモなものが欲しい
>>211 マジで? それ、むっちゃ良い情報 俺のJS魂に火が点いた >>212 jsわかるならGASでググればあとはノリでいけるよ >>213 GASでqiitaの情報見つけた、サンクスコ! >>215 そっちのJSぢゃねーよ!! ・・・いや、無論、なんの意味かさっぱり分からんが・・・ オーケー、遅くても動くだけで満足 LibreOfficeも似非VBAライクなスクリプトじゃなくてJSにしてほしいぜ
GASはデフォルトアカウントとファイルオーナーが一致してないと開けなかったりGoogleのよくわからん仕様(しかもエラーメッセージから解決しにくい)に振り回されるんだよな 個人的にはc#でエクセルマクロをvsで開発できたら最強だと思うんですけど
>>220 普通にc#で作ったexeをキックしろよ無能 C#で作ったアドインをBookに同梱できればいいのにね >>222 無能はお前だろw >>223 は?目的が不明 どうせマクロなんて大手じゃセキュリティで動かんで 本体は別exeにしとけ エクセルでやるのはjson作るまでや それ、かみ合ってない。 a) C# でマクロを作れる環境があったらいいのにな b) セキュリティで動かんから無駄 仮定と言うか希望に対して現状を持ち出しても仕方ないだろ。
>>225 だから作れても(望み成就)動かんて(結果) マクロって標準関数じゃ面倒見切れないような 入力値→シート内でなにか表示、系の処理がやりたくて使うんじゃないの? json吐くとか外部連携だからレイヤーが違うんじゃないのか
>>226 現状動く動かないじゃなくて 動けば良いなって話だろw >>227 UI部分だけエクセルでやるならありかな Excelでマクロ作るユーザー層はVSTOを開発できるユーザー層が違うからどうしようもない
大手って言っても色々 うちも定義上は大企業だけど普通にマクロは使えるし そもそもマクロすら禁止してる職場でテキトーな.exeファイルを動かせるのか?
禁止されてるなら自前でルートキット仕込んでプロセス隠蔽しろよ
>>233 マクロも.exeも禁止された環境に自前でルートキット仕込めとか頭おかしいとしか思えない 作成した実行ファイルまで引っかかると納品できないしexeは通るだろ エクセルマクロは引っかかることはある
exeはうちひっかかるぞ。 自分でビルドしたものは自分は問題ないが、人に渡して実行させた瞬間に某セキュリティソフトが「あんまり見ないexeだけど大丈夫か?」ってダイアログ出してきて、 迷いを見せたら情シス子会社にアラートが飛んでフルスキャンさせられる。
>>237 じゃあ、どうやってc#でビルドした納品物受け取るん? >>239 予めバイナリをひとつ受け取って情シス子会社に送ってスキャン対象外にしてもらう必要がある。 そこそこの企業はこういう運用だと思うけど。 マクロからexe蹴るなんてキチガイじみた行動絶対許可下りないよ。 exeをすげ替えられたら死ぬじゃん。 マクロは比較的動く。 >>240 ありえないなぁ 再ビルドしたら別物でしょ?ダッサw >>241 別物だよ。 納品物をコロコロとビルドし直さないといけない環境なの?って事。 なので自家ビルドは許されてる。 >>242 もちろんそれでも良いよ。 もちろんそれでも、じゃなくて署名以外ないだろ確実な方法は
>>244 そういうわけでもないよ。 電子署名だと有効期限もあるし、単純につければ良いという話でもない。 電子署名付けたところで改竄されてない証明になるだけで、 元々の悪意の有無やバグの有無の証明にはならないからね
おっしゃるとおりで、否認防止、改ざん防止にはなるけど、その署名や署名されたバイナリに悪意がないかは、別途登録は必要ね。 署名元に対して完璧に信頼できるなら、署名を資産管理に登録するって方法で、ある程度面倒くささを回避できるから「それでもいい」になってる。
詐欺サイトも平気でhttps使うし証明書もある時代ですし
>>248 大嫌いなエビデンスの山。 それに加えて検収の時にそれなりの違約金が発生する契約するよ。 >>252 httpsに関してはLet's Encryptがあるし、変な証明書は探せばあるよ。 >>252 経路上での改竄がされてないって証明だけなんだから認証局は普通に認証するよ EVSSLあたりになると会社の実在証明求められるけど そもそもGoogleがhttps始めたのはNTTみたいなスパイ企業に検索情報を渡さないためだからな 個人の安全なんて考えていない
httpsを使ってる詐欺サイトの運営者はマジでタヒねばいいのに もしエロサイト探してて詐欺サイト開いたんなら半分自業自得だけど 真面目に勉強のサイトを探してても詐欺サイトに出遭ったりするからな
技術用語検索してると「貴方は何人目の来訪者です」系の詐欺サイトたまにある
>>257 >>258 技術用語でググって最初のページに出て来たサイトでも 開いたら「おめでとうございます!」っていうのを良く目にする そっ閉じ あんまりそんな目にあったことないが… 一体どんな技術用語でググってるんだ?
>>261 何で検索してるってより、 単にアドネットワークに詐欺サイトも便乗してるだけ 代理店が広告を精査しない限り無くなることはない 最近この手のサイトが検索上位に食い込むこと多くなったよね
>>262 いやどんなワードで検索したら > 最初のページに出て来たサイトでも > 開いたら「おめでとうございます!」 なんてのをよく目にするんだ? って話 >>264 リンク先の広告がリダイレクトかけるって話なんだから、 検索語が何だろうが広告が表示されるページに行く以上は無関係 って話 >>265 だから広告がリダイレクトかけるようなやばいページが最上位に出るようなワードって何よ? って話な そんなページって今時エロサイト位しかないと思うが… マジで理解できてないみたいで笑う サイトには特定の広告しか載らないと思ってるのか? 広告はアドネットワークを介して表示されるけど、 アドネットワーク自体の広告審査はザルなのが多い ザル審査を通っておかしな広告が紛れた場合におめでとうございます だから同じサイトでも起きたり起こらなかったりする 検索語は全く関係ない
広告ブロックがもっとも効果的な防ぎ方 アドネットワークを特定できるならそこに報告すれば広告主はBAN 特定できるアドネットワークはなかなかないけどね
>>267 そんな理由なら下手したらページ開く度にリダイレクトされるだろw よくわからんからどこのページが > 開いたら「おめでとうございます!」っていう のか具体的に教えてくれ 見たいときに見られるような広告なら困らねーよw 理解できてないことを殊更に主張しなくていいからw
>>270 わかったから具体的にURL出してよ よく見るんだろ? 最近検索してないんでしょ 1日中検索するレベルで調べものしてたら週に1回くらいの割合で引っかかるイメージだから1000回に1回くらいかな 検索結果画面にはそれっぽい記事であるかのように表示されてるけどリンク踏むと全然中身の異なるページに飛ぶ Adblock入れてるけど普通に出てくるな 調べ物中に出てくるから問題あるサイト見つけても即閉じてドメインごとブロックしちゃうからどういうときに出てきたかとかいちいち覚えてないわ 今度見つけたら教えてあげるよ
ここまで盛り上がってるレスバではあるが、もはやプログラミングとは無関係な話題なのである
俺はよく目にするなんて一切言ってないんだけど普段からそういう勝手に相手の意見を捻じ曲げてレスする感じなの?
>>271 俺も>>272 と同様 俺は200〜500回に1回ぐらいと言っておこうかな キーワードとしては本当に「微分方程式」とか「回帰係数」とかで引っ掛かる 例を挙げようと履歴を今月初めまで探したが…見つからない Avast入れてるんだけど、開くと「危険なサイトです!」とか言ってブロックされるんだよ それは履歴に残らないんかな? >>271 が単に気付かずに地雷踏みまくってるっていうオチも無きにしも非ず… 俺も見つけたら教えるわ そん時までに絶対にセキュリティソフトは入れとけよ 日本語だとリファレンスが機械翻訳だったり碌な情報がなかったりで Googleで地域の設定をアメリカ+普段は日本語のページを検索にしてると 割とよく有るかな、Wikipediaのクローンみたいな謎のサイトも出てくる
stackoverflowのクローンサイトの話か?
よく目にする 割とよくある でも具体的には出せませーん ってか?w
見たことあるという複数人のレスがあるけど僕は見たこと無いから知りませーんwwwて小学生かな? わざわざ怪しいサイトのurlなんぞ記録なんかしてないっつうの 調べものしてるときに出てくる関係ない情報をいちいち記録なんぞしてたら作業終わらんわ
機械翻訳かましただけのクローンサイトも検索妨害してきてうざいけどそれでは無い 記録してたわけではないから正確ではないけどここ半年〜1年くらいで出現し始めた印象 俺個人は多分10回くらい踏んだかな? ほっときゃそのうちgoogleが対処していなくなるっしょと思ってるから大して気にはしてない
>>281 どんなワード使ってるのかもわからん ※ 「微分方程式」とか「回帰係数」ではそれっぽいのでないし どんなページかもわからん でも複数の人が見たことあるって言われてもなぁw 単にエロサイト踏んでるだけにしか見えんわ 結構出てくるけどな。 この間優待で作ったカードを検索したらめっちゃそれっぽいのひっかかったよ。 シークレットウィンドウで検索しても出てくる。 貼れるのかな。 3ページ目ぐらいから変なリンクばっかりになってくる。 https://www.google.com/search?client=ms-android-google& ;ei=ERQ5YPmdMIi5wAOEgY3oCg&q=%E3%81%BF%E3%81%9A%E3%81%BB%E3%83%97%E3%83%AD%E3%83%A0%E3%83%8A%E3%83%BC%E3%83%89%E3%83%A1%E3%83%B3%E3%83%90%E3%83%BC%E3%82%BA%E3%82%B4%E3%83%BC%E3%83%AB%E3%83%89%E3%82%AB%E3%83%BC%E3%83%89&oq=%E3%81%BF%E3%81%9A%E3%81%BB%E3%83%97%E3%83%AD%E3%83%A0%E3%83%8A%E3%83%BC%E3%83%89%E3%83%A1%E3%83%B3%E3%83%90%E3%83%BC%E3%82%BA%E3%82%B4%E3%83%BC%E3%83%AB%E3%83%89%E3%82%AB%E3%83%BC%E3%83%89&gs_lcp=ChNtb2JpbGUtZ3dzLXdpei1zZXJwEAMyAggAMgIIADICCAAyAggAMgIIADICCAAyAggAMgUIABDNAjoECAAQRzoECAAQBDoGCAAQBBAeOgQIABANOgYIABANEB5QqCBY_k9g-FFoB3ABeACAAawBiAHOEZIBBDIuMTWYAQCgAQHIAQXAAQE&sclient=mobile-gws-wiz-serp#ip=1 見たことないと主張できる程度には検索してんだよね? 個人的には検索回数なんか数えたことも無いけどここ半年で1万回くらいは少なくともしてんだよね? 調べものが少ない仕事なら1週間で10回も検索しないような人も多いと思うけど、まさかその程度で周囲にいる複数人の証言を馬鹿にしてるなんてことはないよね?
>>285 技術用語でもよく出てくるけど、直近で思い出せる範囲で再現性のある言葉がこれしか見つからんかった、それに関してはすまん。 ゲームでもあるのな。 いや、ホント最近多いよ、こういう類の変なサイトに飛ばされるやつ。
俺も検索はしまくってるけど経験ないわ uBlockが効いてんのかな ESETがそのサイト行っちゃダメ!って止めてくれることは偶にある
>>286 スレチだな そんなことが本当にあるなら一度見てみたいと思ってる人がいるかもしれないから その状態を再現できる検索語を挙げるのは良いとしても それ以外で続けるようなことではないな スレチかどうかと言うなら初っ端からそうだろw なに俺ルールで一部を正当化してんだw そもそもうちじゃ署名なしビルドされたexeなんてセキュリティ上使えんよ、って話からスレチだ そこからセキュリティ→https→詐欺サイト→最近の検索結果と脱線し続けてるんだから
ゲームとかエロとかちょっと頭の弱い子が飛びつくようなワードならまあなんとなくわかる > 技術用語でググって最初のページに出て来たサイトでも > 開いたら「おめでとうございます!」っていうのを良く目にする って言うのが単に疑問だっただけ Googleの検索結果が近年劣化してるのは俺も認める
みずほプロムナードメンバーズゴールドカードが、頭の弱い子が飛びつくようなワードか? 疑問だったとか言い訳せんと、そういうタイミングもあるんだな、すまんと謝って幕引けよ。 お前が認めようが関係なく、すれ違いの話をねちっこく「ほんとか?」「嘘だろ」と繰り返したからだろ。
>>292 ストレートで勝負できなくなったピッチャー感あるよね >>294 なんでわざわざそのワード出してきたのかわからんし指摘済みだけど 技術用語じゃないよね どんな技術用語でそうなるかまだ出てないよね >>294 > みずほプロムナードメンバーズゴールドカードが、頭の弱い子が飛びつくようなワードか? そうだと思うよ…みずほだし… まあマジレスしとくと金絡みに飛びつくやつ狙いなんだろうね、お前みたいにw みずほでまともなのはCBの方な。 なおIBM系やみずほ自身はF系や
技術用語でも出るんだけど、再現例を出すのがめんどくさいから再現性の高い例を上げたんじゃん? 多分これで出るわ。 「stackoverflowerror jre7 ibm oracle」 微妙に間違うのが良いのかな。 >>297 なんやろこれ…って思って飛びつく前に検索したんよね。オリコなのは残念。 みずほプロムナードメンバーズ自体知名度低いしなぁ。 みずほはそこまで悪くないぞ。 釣る側は技術用語であるかどうかなんてどうでも良いんだから適当な単語埋め込むであろう もちろん検索ヒットする可能性が高い単語である方が効率は良いが、bot等駆使して大量に作るんだからそこに技術用語が紛れる可能性があることは容易に想像できる web上には技術絡みのページはそれなりの数があるんだからわざわざ除外する必要性がない ゲームはあるけど技術用語にはあるわけが無い、あるなら例示せよ!って言う主張はどういう根拠から?
気になるから例見つけたら教えてや で終わってた話をエロサイト踏んでるだの頭弱いだの煽る必要があったの? 普段からそうやって煽ることしかしてないの?
大企業エアプのパソコンの大先生が空想上の解決法を唱えて、否定されたらそれを認めたくなくて他の意見を見えないふりするスレ
>>306 どんどんページくっていってみ。 一番上ではないわ。 順番ばっかりは広告の出稿状況だからな。 存在はしてるって事をまぶ認識してくれ。
めんどくせえな そりゃどんなワードで検索しても後の方は変なもん出てくるわ
>>302 > 普段からそうやって煽ることしかしてないの? いきなり > 見たことあるという複数人のレスがあるけど僕は見たこと無いから知りませーんwwwて小学生かな? とか言う人に言われてもねぇw >>307 要するに > 技術用語でググって最初のページに出て来たサイトでも は盛ってたって言う認識でいいかな? >>311 俺は最初に出てきたとは言ってないし、 広告の状況や検索ワードによっては一番上に出てくるぞ。 検索ワード連動広告なんて水物なんだからこれだって言えるわけ無いでしょ。 馬鹿なの? >>303 ふらっとの隔離スレ ここで見た変なワッチョイNGしとけばふらっとの方でも見えなくなって便利 レス番飛びまくっても気にしない >>312-313 だから > 技術用語でググって最初のページに出て来たサイトでも > 開いたら「おめでとうございます!」っていうのを良く目にする というワードがあるなら教えてよ 順序は水物って言うなら日頃からそういうサイトを見まくってるんじゃね?w 詐欺に使うキーワードなんて大体決まってるんだから AIで学習させて排除できないんだろうか
そんなのあったら排除されるキーワードを避けるAIができちゃうんじゃない?
セキュリティ対策周りも検索エンジン周りもすでにAIは活用されてる
詐欺サイトなんていくらでもあるから 普段からそういうの踏みまくってんだったらセキュリティ意識低いんだろうな
vXrabasWdや俺・・・勉強熱心で検索回数が桁外れに多いため、危険なサイトにも出遭いやすい その他大勢の愚民・・・馬鹿で鈍間な亀のため、危険なサイトにはあまり出遭わないが、出遭ってもまったく気付かず個人情報を抜かれまくってる
今度はセキュリティ意識が低いとw 逆に意識してるぞ、なるほどわけわからんドメイン、レジストラどこなんだとか、どこのミラーか、とか。 生で踏むわけも無ければ、一応セキスペだしな。
>>316 > そういうサイト見る意味がわからんが、検索ワード連動広告の仕組みも知らんのかな? アホすぎてずっとシカトしてたけど広告なんて普通クリックしないだろ… >>326 「Excel ○○するマクロ」程度でも普通に詐欺サイトあるぞ 見たことも無い馬鹿がほざくな、カス >>325 アホかな。 広告が終わったあとの残骸も検索にひっかかるんだが。 ごく普通のウェブサイトに見えるし。 しかし俺の貼ったURL踏んでもないのなwwww 理解力も無ければ見る能力もないのかwww 必ずしも広告自体をクリックするわけではない。 ほんとにアホなのな。 もうみっともないから黙ったら? クリックはプライベートウィンドウとか、VM立てて敢えてやるときあるよ。 注意喚起もしないといかんしな。 >>327 具体的に書けよ 書けないなら黙ってたほうが良いかと >>328 > 広告が終わったあとの残骸も検索にひっかかるんだが。 連動広告の話か? ならあり得んよ、契約終わったら単なるWebサイトだからトップページになんて出てこないし > しかし俺の貼ったURL踏んでもないのなwwww ⇒ >> 3ページ目ぐらいから変なリンクばっかりになってくる。 既に>>309 で指摘されてるだろ > ほんとにアホなのな。 > もうみっともないから黙ったら? お前がな > クリックはプライベートウィンドウとか、VM立てて敢えてやるときあるよ。 > 注意喚起もしないといかんしな。 話をそらそうと必死かよw 「よく目にする」じゃなくて「ごく稀に目にする」と言ってれば良かったのにな
こんなとこじゃないと喧嘩出来ない奴らだな。かなしー
>>329 トップページに出てくる検索ワード出したよね。 もういいわ。 >>330 俺は一週間に一度ぐらい見るぞ。 CADのカーネル系のことを検索してたりすると割と出る。 ニッチな、普通の検索結果が尽きる部類を検索してるか否かではないかな。 みずほプロムナードメンバーズゴールドカードもその部類だと思うわ。 まずみずほプロムナードウェブがニッチだから。 >>330 だよね まあちょっと盛っちゃって引っ込みつかなくなった感じかと 今度はCADのカーネル系とか言い出してるしw >>333 > トップページに出てくる検索ワード出したよね。 ごめん、見落としてるみたいだからレス番示して引用してくれるかな? C#のスレで技術用語検索の話してて最後はCADだとか言ってんの 全然一般的な話じゃない、ある種のおま環だわな
>>337 CADデータをC#で操作したりすることなんかもしてるし、別に逃げでもなんでも無いが。 おま環というなら、出てこない方もお互い様におま環だろ。 CAD や カーネル は普通に技術用語だと思うけど CAD カーネル で検索しても特に怪しいのは出てこない (1ページ目しかみてないけど) この状況だとまたそれっぽいこと言ってごまかそうとしてるとしか思えない > 別に逃げでもなんでも無いが。 そうかな? > トップページに出てくる検索ワード出したよね。 と言いながら具体的に聞かれたら > 自分で探せ。 とか逃げ以外の何物でもないだろ
CADカーネルでググるやつ居たら馬鹿だわ。 具体的なCAD名とかそのSDKの名前でググるんだよ。 会社バレたら嫌だから名前出さんけど、大手数社のCADとそのSDK名でぐぐってみたら?
>>340 CAD名でバレる会社? 言い訳もどんどん迷走してるぞw ca01-Xw+Oは業界に限らず何も知らないよ 知らない上に想像力も無く実務経験も無い だから企業情報の漏洩に関しても頓着無い 自分の知る世界が全て
この突然現れる擁護が自演臭い なんの主張もなしにただただW4Olの味方をするw
>>344 公正世界仮説の人じゃん、どうしたの急に >>342 意味わからん 大手のCADなんて使ってる会社いくらでもあるだろ 俺は電気系でOrCAD使ってるけどどこの会社なのかわかるってエスパーかよw >>345 お前こそ急にどうしたw >>341 すごいよなw 大手の会社のCADなのに1社でしか使われてないってw 本当にそんなので会社名がバレるなら、誰かが大手数社のCAD名でググって該当するものを見つけて 〇〇でググると最初のページに出て来たサイトでも開いたら「おめでとうございます!」って出てくる と言ったらワッチョイ 0bad-W4Olは会社がバレて困るわけで、そんなのを例に出すなよとw 〇〇以外にも□□とか△△とか、該当するものは他にもあるということなら その名前を出せばいいんだし、そういう状況なら〇〇の名前を出しても 会社がバレることはないんだよな ワッチョイ 0bad-W4Olの会社で使ってるのが〇〇かどうかは分からないんだから ああ、全然レベルが違うわ。 他社さんだけど、CATIAとWindchillに移行した大手、と言えば、あのグループしか思い浮かばんだろ。 お前の思う程度の大手ではない。
とにかく認めたくなくて必死なのはわかったわ。 大手エアプって言われたのがそんなに悔しかったんだろうか。
スレタイも読めない知能で喚くな 板違いだから全員出てけ
すまんな。 以後普通にC#とかexeの話のみするわ。
>>348 まあ話作ったのはいいけどほころび見えまくりってやつでしょw >>349-350 そりゃ最近大々的に移行したって言うなら特定もされるかも知れんな でもそう言うケースは正式発表してるからバレても問題ないだろ あと大手エアプのクソレス無視してゴメンねw >>352 そもそも >>335 > もうレスしないわ。 って大見えきってたのに… とっとと遁走しろよw CADってAutoCADとかVectorWorksとかどこでも使ってるようなのもあるけど、 2DのそういうCADばっかりが全てではないし、特殊性高いソフトも多いと思うけどな 基板CADだってCADだし、ぶっちゃけ自分がCAD使ってたとしても他の会社のCADのことは想像できないぐらいまちまちだと思うけどなあ。
>>356 特殊性があるかどうかどうでもいいことだな 使ってるCADの名前が知られたら会社がバレるから嫌と言いながら そんなのを例に出すのはバカ過ぎるだろってことだから >>348 C#の話しようぜ。 実例は出したんだからイチャモンでしかないわw
>>358 > 実例は出したんだからイチャモンでしかないわw 実例ってどれ? まさかと思うけどみずほプロムナードメンバーズゴールドカードとやらなのかな?w なぁなぁ、F#ってC#の後継言語のつもりで作ったん? だとしたら、F#はこけたけどさ、うまく行ってたら取って代わられてたじゃん? この先、マイクロソフトはC#の上を行く言語を作って 「C#、今までご苦労ね、バイナラー〜、みんな新しいZ#に移ってね」するつもりあるんかな?
.Net 6は早く試してみたいんだよな。 Xamarinの名前が無くなって、単なる.NET 6のAndroidアプリになるから、そういう意味でも期待。 Xamarinは名前に対して悪評が流れすぎ。
>>363 あくまでCILの上で動く1言語って方向じゃないの? 基本的にはC#がメイン言語になってるし、コンパイラもC#で書かれるようになったし。 >>365 じゃ、またCIL上で動くJ#なんていうC#と似て非なる新しい言語が開発されたらどうすんのさ? J#はC#よりも短くて曖昧さ無く書けます、なんて言いつつ、 C#とは別に覚えることが増えて・・・みたいになったらC#で覚えたこと無駄になるじゃん そりゃその先もC#は続けられるだろうけどさ、そこまで良い言語とも思えてないからやる気出ねぇ そういうのが出てきたときに君の好きにすればいいよ 今それ話す意味あるかい?
仕事なら文句言わずに指示された言語覚えて書けって話だし 趣味ならやる気の出ない言語使わなくていいんだし好きにしろとしか
c#の言語仕様がある程度踏襲されてvs上で快適に開発できるならなんでもいいかな
>>366 勉強したことが無駄になるかもしれないなんてありえないからやらないとかいって、 やらない理由探しをしてたらいつまで経ってもプログラムなんて書けないよ そこまで良い言語とも思えない、というのはどのような思考を経てそう思うに至ったの? C#を越えたと誰もが認めるほどのNew#が出来たんならそれはそれで良い事だしな
もう言語名に記号を入れるようなマネは止めていただきたい
>>374 ググラビリティ悪いよな まあC#よりGoの方が最悪だが >>376 C#に関しては不便はほとんどないよ。 まれに無関係なC/C++のドキュメントが引っかかることはあるが、 これはGoogleに逐語的に検索する機能(というか、余計な忖度を抑止するオプション) が存在しないためであってC#のネーミングのせいではない。 もう20年ぐらいになるけど、Googleは独占的地位に胡坐をかいて堕落してる。 Chromeなんてポンコツでも信者みたいな奴がみんな褒めまくって熱心に 布教してくれるような状況が続いてるんだから堕落して当然だけど。 ああ、Rはググラビリティー最悪! 無理矢理RStudioとか統計とかクソいっぱいキーワード付けて探してる
visual studioのことググってvscodeの記事引っかかるのなんとかならんか MSはなんでこんな混同する名前付けたんだよ
だからそれMSのせいじゃなくてGoogleの問題でしょw 何で誰もあの糞使いづらい検索エンジンに文句言わないのかほんと謎 近年は調子にのって事実上の「検閲」までやってるって話だよね
いや名称の問題でしょw visual studio codeだとvisual studioと被ってしまうのでvscodeという略称を使ってんじゃん 同じ単語が入った名称だけど、使用者に応じて結果を切り替えない検索エンジンに問題があるの? 「visual studio」という検索ワードに対してvscodに関する記事は除外するのが理想な挙動なの? 名称に記号を使うのも同様 識別子に記号が使えない箇所ではcsharpと記載したりすることもある wikipediaの記事なんかがそうね これをwikipediaの問題である、とかいうの?もしくはwebの問題かな?
利用しないからわからんがbingだったら検索性能は問題ないの? 知らんがgoogleと似たような結果だよね? ってことは結局MS自身すら対応できてないんじゃんw
ちょっと何言ってるのか分からないけどGoogleの問題点は >>377 に書いてるように指定されたキーワードを逐語的に検索するオプションがないこと。 "visual studio"で検索したはずなのに"visual studio"というフレーズがまったく出現しない ドキュメントが検索結果に表れることを抑止できないことだよ。 >>380 の人も"visual studio"で検索して"visual studio"と"VSCode"の両方のフレーズが 使われているページが引っかかることには文句はないだろう。 正直、検索エンジンはGoogleに駆逐された日本のガラパゴス検索エンジンの方が シンプルで使いやすかった。富士通とかNTTがやってたやつね。 「フレーム問題」というのがあるから検索エンジンといえどもドキュメントの文脈まで 把握できないことは仕方がない。 だが"visual studio"と"vscode"を区別するのに文脈を理解する必要があるか? "C#"と"C++"を区別するのに文脈を理解する必要ある? ないね機械的にできるじゃん。
むしろ君が何言ってるかわからんよw "visual studio"で検索して"visual studio"と"VSCode"の両方のフレーズが 使われているページが引っかかることには文句はないだろう。 いや、そこに文句があるって話なんだが… 例えばvs2019の拡張機能を調べたいときにvscodeの拡張機能に関する記事が引っかかる これを問題視してるんだよ 2019もcodeも一般的な単語なのでvs2019、vscode双方のページにこの単語が普通に含まれてしまう 単語が入っているから検索エンジンで引っかかる これを検索エンジンの問題だというの?
どう考えてもMSの名称の問題だろ Visual Studio Community Visual Studio Professional Visual Studio Code これらをすべて打ち込めば、ある程度問題は解消される しかし、記事を書く側が上記二つを"Visual Studio"と略して書くことが多いので、 "Visual Studio Professional"で検索すると見つからない記事が出てくる なので"Visual Studio"で検索すると、今度は上記三つが引っ掛かってしまう こんなことすら考えないMSが問題
そのパターンでProを区別していない記事が出てこないって Pro固有の情報を求めてる読者に向けての記事じゃないんだから当たり前じゃん
まだやってるよ そんなに語ることあるなら専用のスレ作ればいいのに その方が5chの検索性上げれるやん
>>384 それ検索オプションの完全一致でできるよ 英語だとオプションの名前はverbatim(つまり”逐語的に”検索) 括弧やカンマのような記号入りは無理たけど "visual studio”とかなら問題ない >>382 バージョン名やマイナス検索を追加して visual studio 2019 -vscode + 検索ワード とかでやってみれば >>390 > visual studio 2019 -vscode + 検索ワード まず、なんでそれをユーザーにさせるんだよ、って話だよ それとVisual Studio Communityの記事の中に 「VSCodeの場合は…」とか言う文章が入ってた場合、 その検索方法だと一生見つからない そこまで擁護するのはMSの人間か、相当の馬鹿なのか DataGridView 略して DataGrid
>>386 なるほど、確かにまったく一致部分がない完全な別名なら しなくてよかったはずの苦労が存在するのはその通りだと思う。 だけど企業のブランディング上そういう訳にもいかんでしょう。 やったことはないが生物の病原体のvirusを調べていてcompurter virusの記事が 引っかかることは多くないはず。 これは検索エンジンが (1) 両者を区別した上で (2) 記事のタイトルや内容からどちらを扱う記事か区別している からだと思うが、本来同じことはVSとVSCodeについても可能なはず。 どうでもいいが、次のように入れたら 「"visual studio" 拡張機能 -"visual studio code" -"vscode"」 これはある程度機能するみたいだよ。 困るのは""や-の演算子が常に機能するとは限らないところ。 >>390 Googleに逐語的に検索するオプションはない。 ""は機能したりしなかったり実に気まぐれだ MSの命名がお排泄物なのは昔からだから、こんなところで口からお排泄物垂れ流してるだけ時間の無駄
>>391 だから、それは本来はMSの責任じゃない。 本来責められるべきは検索エンジンの方だって コンピュータウィルスについて調べていて 病原体のウィルスをコンピューターウィルスと比較する記事が 引っかかってしまうのは"computer virus"なんて名付けた人のせいか? >>396 Windows RTとWinRTみたいに擁護のしようがないのは確かにあったね >>397 >コンピュータウィルスについて調べていて >病原体のウィルスをコンピューターウィルスと比較する記事が >引っかかってしまうのは"computer virus"なんて名付けた人のせいか? ああ、その通りだ MSと同じぐらい馬鹿だ お前はもっと馬鹿だけどな スレチだけど新しい言葉を作る時って既存の単語を組み合わせるケースが多くない? それをバカ呼ばわりってどんだけ増長してるの
命名なんてかばん語と既存単語が殆どで、 オリジナルの単語なんてまず無いし、 オリジナルの単語はイメージ付けづらくて廃れがち 検索エンジンが検索する人をバカにしすぎなだけ
>>401 普段Google使ってないのか。 だからそれは不完全にしか機能しないんだよ。 ちなみに、調べてみれば分かると思うが、Googleは以前逐語的な検索を可能にする オプションを検討している時期があったが、結局実現していない。 >>403 馬鹿な奴だ では君に宿題。 Google先生に"アルゴリズム + データ構造"というありがちなフレーズを含む ドキュメントを見つけさせてください。 記号を検索対象にできないのは常識だと思ったが未だにこんな奴がいるんだなw
>>406 これも酷い こんな奴って誰のことだよw しかし、どんな世界にも頭が悪いくせに謎の上から目線のバカはいるけど 今の議論はちょっと度を越してるねw
> こんな奴って誰のことだよw バカだと言う自覚はあるんだなw まあ何がどう酷いかを書けてない時点でハッタリ臭しかしないけど
なんかこの前からGoogle検索でマウント取りたがる奴が増えたな てか同一人物か?w
俺じゃないぞ。 おとなしくしてるんだからいちいちそういう事言わないでくれ。
"visual studio"と"vscode"の区別についての話で >>390 が「検索オプションの完全一致」について >括弧やカンマのような記号入りは無理たけど >"visual studio”とかなら問題ない と書いてるのに、それが「不完全にしか機能しない」例として >"アルゴリズム + データ構造" を挙げるってどうなんだろ >>412 こいつも」酷い。 何度も繰り返し言ってるけど、論点はGoogleに逐語的な検索を行うオプションが存在するかどうか。 逐語的って言葉の意味は理解してますか? 逐語的に検索するオプションは存在しない、という主張に対して>>390 は反論として成立しているだろうか? マジで大丈夫か ここからはおまけ もちろん、例えば機械翻訳が不完全であることがそうであるように、 Google検索の件の制約が技術的な限界に起因するものであればそれを批判するのは 言い掛かりだと言えるかもしれない。 Google検索の件の制約はそういう類の物だろうか? 考えるまでもないね。 >>413 問題になってるのはこれだよな >>384 >"visual studio"で検索したはずなのに"visual studio"というフレーズがまったく出現しない >ドキュメントが検索結果に表れることを抑止できないことだよ。 「検索オプションの完全一致」でこれは防げないの? 防げないのならその例を挙げればいいわけで 防げるなら「逐語的」の意味は関係ないよな >>414 また始まった だから逐語的って言葉の意味を理解していますか? 防げない例は既に>>405 に挙げている。 この例で君が引用した箇所に書いた問題を抑止できない理由は Googleに逐語的な検索を行う機能が存在しないから フレーズに記号を含むことがGoogleを「免罪」する理由になるとまったく思えないが、 仮にその言い訳を認めるとしても同様の問題は記号を含まない検索でもしばしば起こる こんなのGooglle毎日使ってれば誰でも経験してるだろ。 >>415 >同様の問題は記号を含まない検索でもしばしば起こる と言うなら実例をいくつか挙げればいいのに挙げないんだよな >>384 >"visual studio"で検索したはずなのに"visual studio"というフレーズがまったく出現しない >ドキュメントが検索結果に表れることを抑止できないことだよ。 これは「検索オプションの完全一致」で防げるってことでいいのかな C#の話するんじゃなかったのか? 喧嘩したいだけか?
連動広告で喚いてたやつと同じだろ 具体例を出せばいいだけなのにグダグダのオレオレ理論を書き連ねて誤魔化そうとしてるだけかと
連動広告は具体例出したけど認めない人が居たんじゃん。 結局なんにでもイチャモンをつけたいだけの実務経験ゼロの人だと明確になったんだし、そっちを排斥してくれ。
とりあえず、検索とかgoogleの話題で盛り上がってるのは区別なくアホだなぁ…と
例を出せって言うと勝手に相手が疲弊するからな それに対していちゃもん付けるだけで論破した気になれて気持ち良くなれる 目的がそこだからやり合うだけ無意味
>>420 >>335 とか言ってた人? その後CADとかで取り繕うとして失敗してたねw とりあえず具体例を出したと言うならレス番示して引用しなさいよ >>423 取り繕うも何も。 もういいよ。 無限に文句いうだけだろ。 >>422 例も出せないなら黙ってろって話な 腐ってもここ技術板なので具体的に語れない奴は要らんよ >>424 まともな例を出せばいいだけ 出せないなら黙ってろ >>420 具体例出したけど認めないやつと同じやつでしょ 検索オプションすら知らずにしょうもないマウンティングして恥書いたので エクストリーム言い訳してるだけ >>428 認めない奴はその理由も書いてあるだろ 理由がおかしいと言うならそう書けばいいだけ どっちが言い訳の言い訳だかわからんね。 認めない理由ww
恥知らずに勝てる人はいないよ 恥知らずに恥を知れと言っても無駄だ
無知は恥じゃないんだが無知を認められなくなったら終わり 過去の知識がどれだけあっても周囲の足を引っ張る老害でしかない 2件とも完全に老害パターン 同一人物ならまだ救いがある
>>433 殺伐とするのがC#ならまだ良いんだけど、検索エンジンの話題で争ってるからなぁ… 200レスくらい関係ないレス続いてんじゃね 回線切り変えながらレスバトルやっている奴までいて引くわ スレ違いのネタなら適切な突っ込みないからって自覚無くてもクズ
ふらっとでも同じだけどC#と関係ないところでマウント取り合うよね
c#ってWindows10の2004でコンパイルしたものって win10 1803とかでは動かなかったりしますか?
>>266 はよ踏めよ、カスが! 踏まないならタヒね C# Seleniumでブラウザを閉じるときに Quit(); Close(); の動作が最近のChromeのアップデートでかなり遅くなっています。 私だけでしょうか?
映像業界はだいぶ前からそんな感じだよ 建設業界なんかもUnity使ってるところでてきてるくらいだし
C#もPythonもレビュー担当できる程度に普通に扱えるけど Unity未経験だと雇ってくれないor新卒並の待遇でしか採ってくれない印象
3DCGは特にUnityなんかだとアート方面のことを考える人と テクニカル方面のことを考える人が分かれてるから、 アート方面の人と会話さえ出来れば自分のアートセンスはあんまり関係ないと思うけどな アーティスト向けのDCCツールはきついだろうけど
うちも映像制作で使ってるよ。 PBRで良いものであれば、めっちゃ楽。 フェードアウトとか色々スクリプト書いて、タイムラインに並べられるように用意して、あとは3DCGが得意な人と分担してやってる。 レンダリング用のバッチ書いたりとか色々足回り作る部分は多いけど、便利よ。
どなたか以下の現象の解決策をご存知なら教えて下さい。 ---- (1)フォームアプリケーションにRichTextBoxを配置 (2)RichTextBoxの縦スクロールを有効にする exe実行 (1)RichTextBoxの枠内に入り切らない行数のテキストをペーストする。 ※この時点でカーソルは最下位行になる。 (2)カーソル位置をそのままにして、スクロールバーを一番上に持っていく。 (3)フォーカスを別のウィンドウに移動 (4)フォーカスをRichTextBoxのフォームに戻す すると、カーソル位置がRichTextBoxの枠内の一番上にくるように再描画が行われてしまう。 結果、RichTextBox内の文字が消えたように見えるが、スクロールバーをクリックすると正常表示に戻る。 ---- 以上です。
>>455 ペーストしたテキストの末尾の行が最上位に来てしまうってこと? 再現できまへんわ。 >>455 100%再現するプロジェクトをアップロードしてくれれば親切な誰かが調査してくれるかもよ ありがとうです。 余計なものを削ぎ落したプロジェクトに、 再現の様子を収めた動画を同封してアップしました。 https://media-uploader.work/?mode=detail& ;id=7574&original=1 どなたか気が向いたら見てみて下さい。 なお、環境依存の可能性もあるかと思って手持ちのPCで実行してみたら win8.1とwin10 は再現し、win server2012 は非再現でした。 動画を見て頂けるとわかると思いますが、フォーカスが当たった瞬間に余計なイベントが発生している感じにみえます。 >>459 俺は見る気はサラサラないが、>>460 の言う通りエラーが出る media-uploader.work へのアクセスが拒否されましたこのページを表示する権限がありません。 HTTP ERROR 403 >>463 ああ、今度こそ見える おかしな挙動 他の人頼む 再現しないっす。 win10 pro + vs2019
Linqで.max()とかしたときに、その要素が配列の何番目かも取れますか? やっぱら普通にloop回して値なめてインデックスも保存するしかないかな?
そうだね var index = list.Select((x, i) => new { x, i }).Aggregate((a, b) => a.x > b.x ? a : b).i;
即レスあざっす。 コードはシンプルですが、やっぱりループは2周回しちゃいますよね? aggregateは使いなれてないので勉強してみます。
上のコードは二周してないよ Aggregateがループ一周するとき、Selectでインデックス付きの値に変換してるだけ 自分でIEnumeratorを実装してWriteLineなりステップ実行なりで確かめてみるといい
ありがとうございます。 aggregateのたびにselectが一個ずつ呼ばれてその都度newってことですね。
>463 Win10 Pro 20H2 VS2019 16.9.2 再現した
>>472 再現しましたか・・・ ググってるとScrollToCaret()あたりのバグらしき情報も拾えますが、 解決策は分からんですね・・・気持ち悪い。 前に似たような問題踏んだんだけど、当時どうやったかな…… ちょっとソースコード消したっぽくて見当たらない
int[] hoge ={1,5,8,3,6,1,2,5,4,1,1,4,8,1}; みたいな配列がある時に一番出現回数が多い要素を取る方法ある? この例だと1が5個あるから1みたいな。 1の出現回数、2の出現回数、3の…って数えた結果を入れた配列作って、またその配列を頭からなめるしかないかな? 普通に↑書くとなんだかんだで10行に全然収まらず汚くなっちゃいます。
hoge .GroupBy(x => x) .Select(x => new { Value = x.Key, Count = x.Count() }) .OrderByDescending(x => x.Count) .FirstOrDefault() .Value とかかな、動かして確認してないけど
普通にforeachでやれば? なんだかんだしても10行もかからない
>>477 それでも正しい答えを返すけど、グループ化後、カウントするのに1巡し、ソートして (最大カウントを取得して) いるから、ソート結果を他の用途で使う必要がないならムダがある。 1巡で最大カウントを探すならこう。 hoge .GroupBy( x => x ) .Aggregate(new { Value = (int?)null, Count = 0 }, (total, next) => next.Count() switch { var count when count > total.Count => new { Value = (int?)next.Key, Count = count }, _ => total, }) .Value; switch 式を使っているのは next.Count() を変数 count で受けるため。 同着1位が複数ある場合に備えて少し拡張。結果は int ではなく IEnumerable<int> で返るようになります。 hoge .GroupBy( x => x ) .Aggregate(new { Value = Enumerable.Empty<int>(), Count = 0 }, (total, next) => next.Count() switch { var count when count > total.Count => new { Value = Enumerable.Repeat(next.Key, 1), Count = count }, var count when count == total.Count => new { Value = total.Value.Concat(new [] { next.Key }), Count = count }, _ => total, }) .Value;
回答色々ありがとうございます。 LINQ慣れてないので、これから481さんのを、確認したいと思います。 動作確認用にまずはシンプルにこんな感じに書いてみました。 loopで適当に for( int i=0;i<hoge.length;++i){ hogeIndex[hoge[i]]+=1;} で集計と最大値みて Array.IndexOf(higeIndex,max)
using MoreLinq; int[] hoge ={1,5,8,3,6,1,2,5,4,1,1,4,8,1}; hoge.CountBy(x=>x).ForEach(x=>Console.WriteLine(x)); [1, 5] [5, 2] [8, 2] [3, 1] [6, 1] [2, 1] [4, 2]
morelinq初めて知りました。 他にもimportedLinqとかみんな今のLINQに物足りなさ感じで色々作ってんですね。多言語にあるものは純正LINQにもガンガン取り込んで欲しい。
あの目的で481みたいなソース書くやつがいたらわしだったらチームから外すな。 万事あんなソースで埋め尽くされてたら、 超簡易で済むソースがわけわからんもんになるわ。
>>485 チームから外された人はどうなってしまうのですか? >>485 まあわかる。というか、そういう批判が来ることを承知で書いた。 LINQ は map, filter に強いが reduce に弱い。reduce する場面では無理に LINQ にこだわらずイテレーション回した方がよい。 なんで LINQ で書いてみたかっていうと、そうは言っても手続を混ぜずに関数型で書きたいって場面もあるから、思考パズルとして。 どうせ、この課題は学校の宿題とかだろうし。さすがにチーム開発の場面で濫用はしない。 プログラムはリソース制御とデータ変換に分かれるが、データ変換を純粋に連ねていく場面では LINQ から外れたくないってこともある。 そういう場合は 481 のようなのをメソッド定義し、中身は隠蔽してモジュール化しておいて、宣言的に LINQ メソッドを連ねていく。 LINQ to Object なら手続が混じっても問題ないから LINQ にこだわりすぎるのはよくないけれども、一方で LINQ to Entities にする場合は完全に関数型で書かざるを得ない。だから、LINQ to Entities の使い手なら、いかに関数型に閉じて記述するか、っていう思考訓練はしておく必要がある。(481 の例は Aggregate 使っているから LINQ to Entities にならないし、現状の LINQ to Entities には限界があるけど。) LINQ乱用せずに書いたらどうなるかなと思っていろいろ考えてみたけど 思ったより綺麗に書けんね。 結局>>483 が使えるならこれが一番簡潔でいいな っていうかヒストグラム求めるって標準のライブラリにありそうでなかったんだね。 >>488 どうか責任を以ってあなた様がお召し上がりください >>490 リンクを一切使わなくても別にって感じだけどな var dic = new Dictionary<int, int>(); foreach(var h in hoge){ if(!dic.ContainsKey(h)) dic.Add(h, 0); dic[h]++; } int maxCount; List<int> maxKeys; foreach(var pair int dic){ if(maxCount == pair.Value) maxKeys.Add(pair.Key); else if(maxCount < pair.Value){ maxCount = pair.Value; maxKeys = new List<int>(){ pair.Key }; } } >>492 個人の感想です、だけどあんまり綺麗じゃないよねそれ。 重要なのは何を使うか使わないかじゃなくて 読みやすいかじゃないかな。 LIN}Qを乱用云々と書いたのはそれは一般に読みづらいから 自分ならこの辺で手を打つかな。知らんけど 効率無視ならUniquelizeなんてメソッドはいらない int[] hoge = { 1, 5, 8, 3, 6, 1, 2, 5, 4, 1, 1, 4, 8, 1 }; var uhoge = Uniquelize(hoge); var histogram = uhoge.Zip(uhoge.Select(x => hoge.Count(y => x == y)), (x, y) => new { Item = x, Count = y }); var max = histogram.Aggregate((candidate, next) => next.Count > candidate.Count ? next : candidate); .... static IEnumerable<T> Uniquelize<T>(IEnumerable<T> source) where T:IEquatable<T> { var list = new List<T>(); foreach (var item in source) if (!list.Contains(item)) list.Add(item); return list; } >>493 uniquelizeの方が、hashsetを作るより速いのかな? int[] hoge = { 1, 5, 8, 3, 6, 1, 2, 5, 4, 1, 1, 4, 8, 1 }; var fuga = hoge.ToLookup(i => i).Select(g => new { g.Key, Count = g.Count() });
>>493 uhoge.Select(x => hoge.Count(y => x == y)) ↑O(n^2)なのでデータ量が増えると桁違いに遅くなるよ >>496 そうだけど、どんな数え方しても必然的にそうならない? 任意の要素xの個数をO(1)でカウントできると思えないんだけど違うんか? >>497 O(n)でカウントできるよ >>492 のDictionaryに変換してるところとか見れば分かると思う >>498 いやいやいやw それも普通にnの2乗のオーダーでしょ ContainsKeyのコストはO(1)じゃなくO(n)なんだから .NETの辞書はHashテーブルだからほとんど定数時間でアクセスできるよ
>>500 あーそうかw 定数時間は言い過ぎだろうけどO(n)じゃないのは確かだね 俺がアホだった うんだからほとんど定数時間ね intのHash計算とバケツへのランダムアクセスは定数時間 運が悪いと短いシーケンシャルアクセスが入るかもしれないが確率的には気にしなくていい
>>494 あれはforeachの中でContainsしてるから良くないね HashSetで十分だと思うよ Enumerable.Distinctでいいよね? Dictinctの中身はこれ↓ Set<TSource> set = new Set<TSource>(comparer); foreach (TSource element in source) { if (set.Add(element)) yield return element; }
元がhashsetでいいかって内容だったからね hashsetは型で重複がないことがわかりuhoge変数の仕様とも合致しているからより適切だと思うけど、別に気にする程じゃない
LINQ盛り上がってるので、この流れで。 複数の配列の積集合求めたいときおすすめありますか? intersectを順番にやってく?
特にパフォーマンスが必要ないなら手軽に順次Enumerable.Intersect 多少パフォーマンスを求めたいならHashSet化して順次HashSet.IntersectWith 複数のコレクションの積集合を取る操作を頻繁に行うならそういうメソッドを作っておくが吉
件数のバラツキが大きいなら一番少ないのをHashSetして少ない順にIntersectWithしていくと多少高速 Enumerable.Intersectは引数で渡されるほうがSetに変換されるのでHashSetとは逆
windiws form applicationでreflectionを使って名前でForm1 class内で定義されたメソッドを呼びたいときはどうしたらいいですか? var mtd = this.GetType().GetMethod(名前); だと拾えませんでした。
thisって何よ 適切なBindingFlags指定すればいいんじゃね NonPublicとかInstanceとか
実現させたいことと、やろうとしていることとがマッチしていない予感
数年ぶりにForm使う事になりました。 Controlを座標決め打ちで配置する事になんとなく違和感感じるんですが、 Dock・Padding・Marginでレイアウトしていくのは避けるべきでしょうか? 例えば、1つのフォームを左右2つに分ける場合は、Dock.FillのPanelとDock.RigthのPanelを置いて、 それぞれのPanel内に配置するコントロールも、Dock・Margin・Paddingでレイアウトしたいです。
当たり前だけど座標決め打ち配置なんて滅多に行わないのが普通 そういう場合はTableLayoutPanelを利用するのが一般的じゃないかな RowとColumn指定で表みたいに配置できるタイプのコンテナ つまりその場合はColumnCountを2にして左側に置きたいものをColumn=0、右に置きたいものをColumn=1とすればいい Dockとかで左右分けるのも無しではないが、そうするとコントロールの長さによっては被りが発生する
>>513 ありがとうございます! TableLayoutPanelで思い通りに配置出来ました。 うへ、絶対座標使わないんか そんなことするんだったらWPF使うなあ
Formで*LayoutやPaddingでレイアウトしてくの、VisualStudioのデザイナで保存した瞬間に座標決め打ちされるのがね…… 個人開発なら問題ないけど個人開発なら素直にWPFなり使えば良いし 複数人での開発だと1人でもデザイナでレイアウトしたい人がいるとその人が保存したら決め打ち座標が設定される
独学で小さな会社の社内用にちまちまやっているのですが フォームの数やクラスファイルが次第にでかくなり VisualStudioが重く感じたり、デバック立ち上げるときのもっさり感が気になります いくらかDLL化するとVisualStudioでデバックするときの処理の軽さや Setupファイルのビルドの速さなんかに影響したりしますか? 個人レベル(単独で)で開発してる限りでDLLにするメリットってありますか?
ソリューションやプロジェクトを分割すればVisualStudio自身の負荷は軽減されるとは思う
>>518 ビルドはプロジェクト単位で走るから、早くなると思うよ。 各プロジェクトのソースコードをまとめていじって、まとめてビルドしたら時間は変わらないけど。 ※同一ソリューション内にあって、ソリューションごとビルドしても変わらないけど。 dllに分ける必要があるかは個人レベルとか関係ないからやってみたら? そんで色々考えるのがいいと思うし、楽しいよ。 >>518 そもそもプロジェクトの規模に比例してVSが重くなったりしないと思うよ。 少なくとも「ちまちまやってる」程度なら絶対にありえないと断言できる。 重くなってる理由は他にあるんじゃないのかな 必要性もないのにアセンブリを分ける(dllにする)ことには反対。 皆さんレスありがとうございます ソリューション内にプロジェクト分けてそれぞれ書き出したDLLをメインのプロジェクトで 読み込ませて使う・・・メインのビルド(動作テストなど)は軽くなるという理解であってますか? 修正があれば、そのプロジェクトだけビルドし直す、 最終的な製品にするインストーラー生成時はかわらないと >>521 かれこれ2年近く機能拡張続けていて、Form画面だけで300くらいで それとほぼ同数のサードパーティ製の表形式コントロールやら帳票やらもある感じです vsフォルダ作り直したり、VisualStudioの軽量化はいろいろ試して 多少は軽くなってますが、ファイル数が多ければビルドに時間がかかるし InteliSenseやエラーの出力など、プロジェクト内のファイル数が多ければ多いほど そのための処理が入るのかなと思ったのですが違うんでしょうか 何分素人レベルなので、デバック→エラー→修正→デバック→の繰り返しでなんとかやってるので ビルドの速さが結構切実だったりします そりゃ必要ないソースもビルドされるから遅くなるわな まずは処理単位でプロジェクトを分割することオススメするよ
こうやって情報を後出しすると話がなかなか進まないのです
普通にソース書いてデバックするだけのプロジェクトなら差分ビルドでそんなに時間がかかるイメージないけどな 別の要因が色々出てきそうだけど、まあ分割して解決したらいいね
makefileとかだと依存関係が正しくなくて差分ビルドのつもりでも全ソース フルビルドになっていたとかあるけど あと、サードパーティーのコントロールとかって話なので、パッケージが なんでも無条件にフルビルドするので、自分の修正とは関係ないところで ガンガンビルドがはしっているとか
VisualStudio2019のクエリビルダー使ってFillを生成してるんですが、 クエリビルダーの「クエリの実行」ではパラメータに「%」使って目的のデータを取得出来るのに 生成したFillの「データのプレビュー」でパラメータに「%」使うと何もヒットしないという現象が起きてて途方に暮れてます ちなみにアンダースコアは任意の1文字で検索してくれるので初心者女子高生の私には もう原因さっぱり判りませんの(´・ω・`)
自力で簡易なセキュリティソフトを作りたいと思っています。 動きは単純で、登録されていない実行ファイルが勝手に外部に通信しようとしたらブロックするだけのものです。 AVASTがやってる動きです。 何らかのAPIをフックするのだろうという事は想像できますが、取っ掛かりが分かりません。 どのAPIを見れば良いのかご存じの方いらっしゃいますでしょうか?
Windowsの話だったらWindows Filtering Platformとか
wpf でtabcontroleで複数タブにrediobutton配置支店ですけど これを全部一つのグループにすることってできないんですかね? groupname指定しても駄目だったので仕様的に方法なしなんでしょうか……(´・ω・`)
GroupNameでは無理 IsCheckedへのバインディングとかでうまいことやって
>>535 明らかにC#の範囲外の質問でOSハックレベルの話だが、例えばWindowsならカーネルドライバを利用した通信フックライブラリはいくつかあったはず んでTCPやUDPのソースポートから発信元プロセスは特定できるからそれくらいならすぐ作れるだろうけど 想像以上に多くのシステムプロセスが通信してるから登録するのめんどそうだけどな >>539 バインディングなんてわかるわけ無いだろ!(`;ω;´) もう仕方ないからボタンと背景色でタブっぽい見た目作ってラジオボタンをVisibleったりhiddenったりしてそれっぽいの作った…… functorに関する質問です C++で次のように書いとけば template<typename Functor> double Example( Functor func,・・・){ 呼出し時に、引数funcに関数へのポインタでも、ラムダ式でも、関数名でも記述できますが、 C#で同じように、引数に、デリゲートでもラムダ式でも関数名でも記述可能にするにはどーすればいいのでしょうか?
> 引数に、デリゲートでもラムダ式でも関数名でも記述可能にするには デリゲート型を指定すればいい double Example<T>(Func<T, double> func, T obj) { ... } double ToDouble(Hoge hoge) { return hoge.Value; } this.Example(obj => obj.Value, hoge); this.Example(ToDouble, hoge); this.Example(new Func<Hoge, double>(ToDouble), hoge); ただしシグネチャが同じでもデリゲート型が違うと無理なのでラムダ式なりとおす必要がある delegate TRet Converter<TArg, TRet>(TArg arg); var conv = new Converter<Hoge, double>(obj => obj.Value); this.Example(conv, hoge); // エラー this.Example(obj => conv(obj), hoge); // OK
System.Collections.Generic.List<System.String> hips = new System.Collections.Generic.List<System.String>(0); hips.Add(@"尻"); hips.Add(@"ケツ"); hips.Add(@"Buttocks"); hips.Add(@"んまら"); hips.Add(@"臀"); hips.Add(@"ω"); hips.Add(@"Hip"); foreach (System.String hip in hips) { System.Console.WriteLine(hip); }
俺のツレの先輩がc#プログラマに酷い目に遭わされたことがある c#プログラマから金借りて返さんかったら、拉致られて拷問うけた 指の爪全部ペンチで剥がされてその後ペンチで指先を挟んで潰されたらしい 4本目くらいで痛みに耐え切れなくて舌噛み切って死のうとしたけど死ねなかったって 命までは取られなかったけど指先全部駄目になって切断したみたい
メモリ不足での相談です 小さいjpg画像ファイル(1ファイル50KB程度)を10,000ファイル程度 サードパーティ製のGridViewに投げ込んで表示させようとしてます その前にList<Image>に下のような感じでStreamで投げ込んでいくのですが var fs = System.IO.File.OpenRead(@filepath); ListData = new Bitmap(Image.FromStream(fs, false, false)); fs.Dispose(); 4000ファイルあたりでメモリ不足に陥ります VSの診断ツールで見ていると、読み出しはじめて4GBで止まります メモリが4Gでアウトになっているのは理解できるのですが ローカル上のファイルの総データ量は800MB程度で、実際に読み込みがとまるあたりでは せいぜい200MB程度読み込んだ程度と思います 2000ファイル程度にグループごとに都度分けて読み込ますしかないかなと思っていますが 確認すべき点(余計に容量食っている要因)やなにか他に方法があったらご教授ください
>>548 JpegをBitmapに展開してるのだから容量が増えるのは当然では >>549 レスありがとうございます 同サイズ程度のbmpファイルもあるのでそっちでやってみましたが 4000ファイルが6000ファイルくらいに限界数が若干のびだだけでした 32bit優先が付いてるとか? ただどっちみちアプリ全体どころか、1つのリストで4Gもメモリに保持とかは筋がめっちゃ悪いぞ。 4000ものフル画像が同時に必要とかあり得ないし。 表示上必要ならメモリ上にもつならすごく小さなサムネイルをダイナミックに並列処理で作りながら持つとか。 今表示に必要なものだけ、ダイナミックにメモリで並列処理でサムネ作るとかでしょ。
今時VirtualMode的なものが無いグリッドコントロールなんてあるのか?
>>552 やっぱり、そうですよね 実際には10000ファイル越える予定だったのでなおさらですよね スクロール時のスピード感は多少落ちますが 素直にグリッドコントロールが描画する際に都度読み込むようにすることにします >>554 良い悪いは置いておいて、とりあえずファイル郡をまとめて読み込んでおくのが 目的で、Bitmapで変換するとメモリを消費してしまうのならば、ファイルの内容を Streamの配列に読み込んでおいて、表示するときにBitmapで変換するとか そして表示するだけならばBitmap使わなくてもImageでStreamから読んで DrawImageでよいんじゃないかなとか 要するにサムネ表示したいんだろ SSDなら1万ファイルの読み込みにもそんな時間掛からんし ファイルをインデクス化して画面に出る部分だけ都度読み込んで描画すればいい グリッドビューなんて必要かね
仮想化すればいいだけの話じゃん 何兆個のファイルがあろうとどうせ表示される項目は多くても数十なんだからスクロール位置などから表示すべきファイルだけサムネ表示すればいい
日本語の変数名使えるのに記号の変数名はダメなのかよ 競馬関係のアプリ開発受注したから予想記号の変数名として分かりやすく記号使いたいのに
enumの値とかならまあわからなくもないかな enum 予想記号 {◎, ○, ▲, △, ☆, ☓}; var 予想 = ◎; フォームを開いてその画面での処理中に Form fs = new FormA; try{ fs.ShowDialog(); ←ここ } catch{} ここのところでハンドルされてないエラーがでて止まります FormAでの例外処理などには一切ひっかからず この場合解決の道筋はどこからでしょうか ちなみにFormAではwebview2でオフィス365のウェブ版エクセルの新規作成を開こうとするとエラーになります ワードではでないのですが ここででるエラーは、System.Runtime.interior services.COMEException 0x8007139Fです
>>564 まず意味が分からんけどFormなの?Dialogなの? >>566 すみません、書き間違いです Form fs = new FormA(); >>565 ググったのですが、webview2がnullなってるのだろうと考えられるくらいで、同じケースはなかったです そもそもなんでワードは開くのにエクセルはwebview2がnullになってしまうのかわからず、どこの時点でそうなるのか調べたいのですが、FormA側ではcatchできず、上の位置で停止するんですよね それ以前の根本的な問題があるのだろう 君には無理とは言わないがしばらく距離を置こう
変な所でフォーム表示しようとしてんじゃね そのコードだけじゃなくてメソッドごと見せてみ
>>569 FormAにはwebview2を配置していて、ブラウジングさせています 通常のサイト閲覧は何も問題ないのですが、ブラウザ上でエクセルが開けるoffice365を使用中、新規作成で開くときだけ呼び出し元のフォーム(上でこことしたところ)で停止します 既存のエクセルファイルなんかはFormA上のwebview2できちんと開けているのですが なので、自分で書いた特定のメソッド中のエラーではなく、ページ遷移中に停止し、呼び出し元のShowdialogのところに戻ってハンドルエラーになってしまいます 再現する最小コードを作る それでも不明ならその最小コードを公開して質問
ゲイツが収入マイナス7兆円ぐらいで苦しんでる。 c# プログラマから金を集めて、ゲイツに寄付するべきだと思う。 損失の一部 5兆円ほどc#プログラマから強制的に集めたい。国内に5万人ぐらいc#プログラマはいるから、1人1億ぐらい払えばいい。 土地とか家を売ればこんぐらい払えると思う。 払えないひとは肝臓とか売ればいい。
>>572 では早速言い出しっぺのあなた様から肝臓を差し出して下さい DBから取得した重複なしの文字列List (要素数約4000) をComboBoxのDataSourceにセットする処理が、 約900ms〜1100msかかり、その間Formが固まるのですが、どうすれば固まるのを回避できるでしょうか。 A5M2でSELECTクエリの所要時間を見ると、だいたい700ms〜900ms台で、ここは改善のしようがなさそうです。
ComboBoxで4000の中から選ぶのは大変そうだな DataSourceに設定する前後にComboBox::BeginUpdate/EndUpdateを呼べば多少は改善すると思う それ以上はComboBoxじゃ無理じゃないかな 仮想モードもないし
>>578 DBから取得する部分を別スレッドで動作するasyncメソッドにするです UIの更新は別スレッドなのでInvokeで awaitしとけばUIスレッドに戻ってくるからInvoke要らんだろ
みなさんありがとうございます。 BeginUpdateとEndUpdateで20〜40msほど早くなりました。 現状、DBからの取得部分は別スレッドにしています。 ただし、フォーム表示時に、 @ComboBox の DataSource に List をセット。 A別の個所で設定した値で、ComboBox.SelectedItemを決定。 BComboBox.SelectedItem に応じて、それに対応するデータを DataGridView に表示。 という処理をしているので、結局ComboBoxへのDataSourceセット待ちになります。 むしろUIと同じスレッドでデータ取得すればスレッド切り替え処理がなくなって微妙に高速化出来るんじゃ?と思ってます。
データ取得をUIスレッドで行ってみましたが、別スレッドでしたケースと比較して、実行するたびに優劣変わる程度でした。 これ以上の改善は無理そうなのでいったん諦めます。
Formが固まるのを回避したいってのは高速化したいということだったのか・・・ ま、がんばって
>>578 転送時に圧縮かけたら高速化するんじゃね 構成わからんからあてずっぽうでいうけど DBサーバと近いWEB鯖のPHPでデータ一覧取得してJSONとかで転送(要するにPHPでAPI作成) サーバの設定等でHTTP圧縮をON 圧縮かかってるから転送そのものが高速化される どうやって圧縮かけるかは他にも色々やり方あるだろうけどね LAN内に全てそろってる(例えば同一PC内)としてもかなり速くなるはずだよ クエリで700msってのが気になるけど時間かかりすぎじゃないかな Explainみた? プロファイラはどう?昔はEQATEC Profiler使ってたけど今は何がいいんだろうね どこにどれぐらいの時間がかかってるかわからないと理論値と比較できない 初見の感想は4000件程度で700msもかかってるのが気になる 応答だけ?それとも結果の羅列まで込みの時間かな クラサバでそんなにかかる処理ってあまりないと思う そもそも一瞬で取得すれば固まらないからね あとはUIに先回りして裏で取得するとか、DB側でキャッシュするとか、小出しにしていくとか・・・ まぁ、一番簡単なのは画面にプログレスバー出してめっちゃ高速に処理してる風を装う事とかだけど ただ、何も知らずに直観でいうと100msは切るはず
実処理時間と言うより、 取得中に割り込み入れないと固まったように見えるってだけの話では
時間が掛かっているのはデータ取得の部分じゃなくて 取得したデータをコンボボックスに渡す処理(>>584 の@)だから >>579 が全てだな たぶん「犯人」はComboBoxだろうが一応問題の切り分けが必要だと思って public Form1() { InitializeComponent(); var asm = Assembly.GetAssembly(typeof(Form)); var bl = new BindingList<Type>(); foreach (var item in asm.GetTypes()) bl.Add(item); var sw = Stopwatch.StartNew(); comboBox1.DisplayMember = "Name"; comboBox1.DataSource = bl; Console.WriteLine($"Time = {sw.ElapsedMilliseconds} ms, Number of Items = {bl.Count}"); } こんなコードを書いてみた。10年前のポンコツPCで実行してるが約2400個のアイテムをぶち込むのに デバッグモードでも10ms程度の時間しか掛からない。 つまり「犯人」はComboBoxじゃないんじゃないの?知らんけど。
>>591 フォームのコンストラクタで測ってるけど、フォームがロードされた後で測るとかなり変わるよ うちの環境ではデバッグビルドで、コンストラクタ:3msec、Loadイベント時:226msec DB の実行計画を見れば? インデックスを使わずに、全件探索でもしてるのでは? 2分探索なら、2 ^ 10 = 1,024 2 ^ 12 = 4,096 つまり、12回探索するだけ ミックの本でも読んだ方がよい
インデックス張ったら挿入や更新の度に毎回ソートしてるとでも思ってるんだろ
約900ms〜1100msの処理のうち クエリが700ms〜900ms台で、改善のしようがないっていってるんだから それがホントなら速度的なものはどうしようもないと思うんだが 画面が固まる対策ならクエリを非同期に(正確にはUIスレッド以外で、か)しろで終わりだろ
ルビおじに絡むおじさんはルビおじよりさらに無能だからな
WinFormsのComboBoxに仮想モード追加する例ってありそうで無いな
じゃ俺がWinFormsのComboBoxを仮想化する知恵を貸そうか?
みなさん本当にありがとうございます。 原因は、約4000の要素をDBから取り出す所要時間でした。 約60万レコード内の、文字列カラムのデータを、重複しないように、GROUP BYする処理が時間食ってました。 なので、該当の文字列カラムだけを重複なしで格納するキー一覧テーブルを作り、 データINSERT時に、キー一覧テーブルの既存レコードと一致しない文字列だけをキー一覧テーブルに追加するトリガー処理を作りました。 そして、ComboBox の DataSourceにはそのキー管理テーブルのデータをセットするようにして、表示所要時間を5〜6割短縮出来ました。
高々60万レコードの group by に700msって遅くね? DBMS 何使ってるのかわからんけどインデックス張るだけで良いような気もするが…
GROUP BY自体が遅いもんよ SQLが悪いとインデックス使っても無視されてFULL検索になってしまう
それより結局ComboBoxは何の関係もなかったってことだよね? つまりボトルネックがどこにあるのか計測して確認もせず思い込みで ComboBoxが悪いとミスリードな質問をした。 ここは反省して欲しい。
最初の質問で問題の処理に約900ms〜1100msかかっていてそのうちクエリの所要時間が700ms〜900ms台と書いていて、その上でクエリ以外の部分(約200ms)を改善したいという話だったから測ってないわけではないかと クエリ部分は改善不可能と思い込んでたのはあるが
>>611 は毎度お馴染みで皆さんご存知の、 ComboBoxに責のあるマイクロソフトの犬 最初に戻ると結局画面は固まってなかったってことなんだろうな これが一番のミスリード
FormのLoadで何も表示されないまま1秒以上かかるとかなり固まった感は強い だからスプラッシュやプログレスバーというのは非常に大事 これがあるだけでクレーム率はかなり下がる 速度最適化というのは実際のレスポンスやスループットだけではなくて 体感速度も最適化するべきなんだ
いや、クエリの間は固まってたんじゃね そういう意味ではコンボボックスは無関係だな
別スレッドでの取得結果を待たずにコンボボックスが表示できるとは知らんかった
>>621 それが期待する動作だったとは読み取れなかったわ… なるほど 同期で待つのと非同期で待つ違いがわかってなかったのか
>>613 なるほどね。読み返してみると確かにそういう風に読めないこともない。 でもその解釈だと辻褄が合わないように聞える部分もいろいろあるね。 まあ揚げ足取りは本意じゃないのでこれで >>610 group by の動作原理考えればそうでしょう ソートと集計の複合技でっせ EFを初心者に進めたくないのがその辺りかな 実行計画取れやと言いたくなって来る >>622 期待する動作は > その間Formが固まるのですが、どうすれば固まるのを回避できるでしょうか。 だよ? その間ってのがどこからどこまでか 固まるとはどういうことか が、普通に考えるのとずれてるんだがな
今回みたいなケースは再現しようがないから想像するしかないんだよな 齟齬が出るのはしょうがない
メインウィンドウが開かれるのに時間がかかる場合って自動的にマウスカーソルに砂時計付くよね これってWindows 10だけの機能なのかな? スプラッシュはそういうことに気付かない人にはわかりやすいからいいと思うけど
C#について詳しくなりたい。 .net独学だからテクニックが全く身についてこない。 働きながら学べる人たちが羨ましい。
>>632 Effective C#とMore Effective C#買って読めば >>632 オープンソースのソフトウェアをただそのまま使うのではなく 自分で使いやすいよう改造して使ってみたらどうかな ひとが使いためのライブラリ作らない限りテクニックなんかロクに身に付かんでしょ。 テクニックが要らないように作られれてるのが人気があるライブラリなんだから。
async・awaitを使った非同期処理の並列処理数をSemaphoreSlim使って制御しています。 https://qiita.com/tadokoro/items/28b3623a5ec58517d431 を見ると、SemaphoreSlimのパフォーマンスはそこまで良くないらしいんですが、async・awaitを使いつつパフォーマンスを上げる方法はないでしょうか? 並列処理数の上限は4が理想です。※多ければ多いほどいいのはいいです。 SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1,4) await semaphoreSlim.WaitAsync(); try { await 自分の非同期メソッド } finally { semaphoreSlim.Release(); } 必要な場所にだけlockを掛ける lock不要なロジックにする
>>637 await,asyncはlock使えないから基本>>638 の通り排他不要にするか、そのコードで頑張るしかないんじゃね >>637 そのベンチマークは同期のオーバーヘッドを気にするくらい ゴリゴリ共有リソースにアクセスする場合のための比較だから 4並列でawaitするような処理をする場合とは全然違うものじゃない? async,awaitってlock使えないのか。。
>>638-640 ありがとうございます。 必要な場所にだけ lock 使うようにします。 lock 不要に出来るかも検討してみます。 これだけだとロックのパフォーマンス差なのかawaitのオーバーヘッドなのか分からん気がする
#region を使うのは駄目ですか? 開くの面倒だ!ってセンパイに怒られました・・・
コーディング規約に従え 個人的には使わないし他人が使ってても気にしない メソッド1個ずつにregionあったらちょっとうざいけど、ショートカット一発で全部開けるしどうでもいいかな
>>646 の言う通り うちには規約にregionについての記載があるのでその通りにしなかったらレビューの指導対象 こんなことをここに書き込むと言うことは >>644 は規約を読んでないか規約そのものがないかのどちらかだと思うけど regionは規約がないなら使わないのが無難 特に〜のプロパティ、〜のメソッドみたいな囲いかたは最悪で、今後regionを意識してメンテしなきゃいけないのが面倒 折りたたまないと把握出来ないほどぐちゃぐちゃになってますって言ってるようなものだしね
#region (規約) 把握できないほどグチャグチャになるくらいなら囲んだ方がマシ #endregion
画面のクラスとかだとregion的な機能つかいたくなることはあると思うけどなあ。 画面って結局、人間にとって都合のいいように複数のデータを出すものなので、そのデータ毎にregion作ったりするのは変じゃないと思うけど。 Formに依存するコードを、 Form外の別クラスに書いたりしたくないじゃん。
コメントを書かない論者と同じ臭いがする 誰が読んでも自然言語と同じレベルで即座に理解可能かつ 解釈の余地の入らない完璧なコードを書けていて しかもチームの全員がそのレベルに達しているという 地球上に存在しないチームで働いているかのような思い込みをしている
自分しか読まない使い捨てのテストコードならコメントも書かないし、ましてや#regionなんて使わない
#regionはあまり使わないが IDisposableパターンの実装とか定型文的なのはでregionで畳んでおくな
俺もそんな感じだな インターフェースを継承するクラスは定形文が多くなるから囲んで畳んじゃう
IDisposeパターンなどはpartialでクラスごと隔離するのがお薦め
partialはお勧めかなぁ? 一見、Disposeが必要なメンバーを持っているのにIDisposableパターンを実装し忘れたクラスに見えてしまいそう。
自動生成してくれるならpartialでもいいけど自分で書くなら俺はやはりひとつのクラスにするな
VSでクラスから別に定義されたpartialクラスに飛ぶ方法がよく分からないので、partialは使わない。
まあクラスに飛ぶとか言ってる時点で使わない方が無難だろうね…
F12とかCtrl+F12とかできなかったっけ 知らんけど
>>661 言い方が雑なだけでおかしなこと言ってるようには見えないけどなあ partial は元々自動生成コード用の機能であってクラスを分割する機能ではない 明らかインターフェイスの実装を#region化する方が可読性が高い
>>663 相手を否定せずにはいられない可哀想な人達が一定数いるから、そっとしておいてやりなよ。 partialでクラスを分割してもファイルは1つのままでも問題ない 目障りなコードを#regionより明確に隔離できるから良いんだけどね まあ1クラス1ファイルの規約が有るなら無理だけど
partial→見るな触るな region→見てもいい触ってもいい という使い分けになりそう
そんな教条主義的に考えなくてもいいでしょw トポロジー的(?)には部分クラスは本の1巻2巻、 #regionディレクティブは章に近い感じがするので必然的に部分クラスの方が 出番は少なくはなるわね。 何のために使うべきか、何のために存在するかってそれじゃ哲学だw エンジニアリングの発想は「何に使えるか」でしょう
#region 定数 #endregion #region 変数 #endregion #region プロパティ #endregion みたいに整理?
クラスの一部をT4で生成させたときに手で書いた分とファイル分けてpartialにするのとかやったことはある regionはIDisposableとかインタフェース実装した時に囲っておくのはよくやるし、 >>669 みたいな使い方するときもある 定数が増えるなら外部ファイル定義にしろ 変数やプロパティが増えるならクラスを分けろ と思ってるから滅多に無いが、何らかの理由でやむを得ず肥大化した時は>>669 のやり方してるな フォルダ整理と似た話だよね regionってつまるところデスクトップにアイコン敷き詰めてるやつが画面上で1列空けてわかりやすいでしょって言ってる感じ フォルダ作るなりツールなりで管理した方がと思うけどそれが本人にはわかりやすいんだろうな
というよりデスクトップにファイル並べてるのをフォルダに入れて整理するようなイメージ
vs2022へ向けてちょっと気合い入れて学習直しすわ
多数のクラスが、イベントを相互に Invoke・Listen するようになってきて、 無駄な Invoke・Listen が多数あるような気がする場合、整理するいい方法を教えて下さい。
>>675 N対N関係を整理したいって聞いたら真っ先に思い浮かべるのはmediator? Utf8Stringって闇に放り去られたの? C#でHttpClientとか利用してると都度気になっちゃうんだけど
そういや8だか9だかで採用って話があったね 10の新機能候補にもないもたいだが…
>>675 Microsoft.Toolkit.Mvvm.Messagingでイベントを構築し直したら良いんじゃね? こいつは .NET Standard 2.0対応だからwinformsでも動くはず とりあえず(ReadOnly)Span<byte>使っとくかと言ってる間に もうそれでいいかってなってる感がある
HttpClient周りじゃReadOnlySpan<byte>すらも利用できないじゃん URLとかヘッダに直接utf8放り込みたいのにstringしか受け付けてくれないし その点System.Text.Jsonは直接utf8で行けるからまだマシだけど それでもせめてC++みたいに「u8"あいうえお"」みたいに簡単にリテラルUtf8書けるようにしてほしいわ byte[]で良いから
C# やってる奴らとかマジで仕事舐めてんだろ 俺なんてくっさいゴミ回収の仕事して、年収たった900万円台やぞ ゴミの回収は、無かったらお前らだけじゃなく、お前以外の皆全員が困るが、お前らがやってる C# なんて なくてもお前らやお前の身内以外誰も困らんわボケ そもそも C# なんてただのお遊びやんけ 頭使ってる? 頭が良い? そんな頭が良いなら、研究者や医者やもっと世の役に立つ仕事に就けよカスが 一部の頭のおかしい意識高い系どもが C# を神格化して アフターコロナの立派な文化だ! だなんてほざいてるが根本的にやってることは eスポーツと変わらん そもそも遊びは仕事じゃねーんだわ ただの遊びでしかないもので客から金を巻き上げて立派な仕事だの崇める まさに不労所得じゃねーか そして不労所得者に向けられた言葉 「働かざるもの食うべからず」 これ C# プログラマに対する言葉だよ お前に俺がやってる仕事やらせてやろうか? 熱い炎天下の中を走りながらくっさい生ゴミの入った袋を何百個とひたすら回収する。パッカー車に手を巻き込まれりゃ腕切断してカタワになるリスクもあるんだぞ? 夏も冬も空調の効いた部屋でキーボード打ってるだけのお前らなら3日も持たねーだろうな でもな、これが仕事じゃ。仕事舐めんなカス
間抜けな仕様なのは重々承知なんだけど c#で作ったアプリケーションでアイコンダブルクリックして起動したあとに もう一回アイコンダブルクリックしたときに 新しいプロセス起動させないで すでに起動してるプロセスのmainwindow以外の window起動させることできないですかね?
>>689 今俺が作ってるアプリではMutex見て、その上でプロセス間通信してる。 coreだとどうしたもんか、と少し悩んでる。 xamarin.formsでタブAからタブBのテキストボックスの値を参照できないので、どうすればいいですか? タブA.csから タブB.txtName を参照するとエラーが出る。
>>692 どっか別のインスタンスにもっといたら? 入力された時点で親に入れたり。 ArrayPoolの内部がよくわからないんだけど、GCに負担かからないっていうのは逆に言えば内部バッファは常駐されるってこと?
audioSource.PlayOneShot(Announcement); で1分ぐらいの説明音声を流しているのですが、 音声が流れている間、入力を受け付けない良い方法って無いでしょうか?
>>697 VS Installerで、[変更]→[個別のコンポーネント]で、[.NET5.0ランタイム]にチェック入ってる? >>700 もしかして、.NET Framework4.xで作ってある既存のプロジェクトを対象のフレームワークの切り替えだけで.NET5にしようとしてるの? それは無理だから、>>698 が挙げているページにあるように移植作業が必要だよ >>701 そうなんですね、勉強になりました、ありがとうございます。 それほど複雑じゃ無い(いかにも企業ユースなフレームワーク使ってるとかで無い限り)プロジェクトなら.net frameworkのソースそのままで.net5としてコンパイル出来る。 ついでにいうとこういった複雑でないものは、.net frameworkのまま、.net5から参照可能。
一方、net frameworkから.net5を参照するのは無理。 この場合既存部を.net frameworkのままで通したい場合は、 .net5の方は薄くCOMインターフェースでうっスーいラップ挟むのがいいかな。
なんでそうぶち上げては切り捨てるを繰り返すのかねMSは
初心者用書いたのですが返答こなさそうなのでこちらに書きます(マルチすいません) GoogleChromeにあるイメージファイルをデスクトップにドラッグすると大抵の場合イメージファイルを保存できますが これをPictureBoxに直接ドラッグしてイメージを表示させたいです ※URLを取得してからのダウンロードだとjavascriptなどで読めないイメージが多いので他の方法を探しています これはクリップボードを経由してるんでしょうか?もし経由しているとしたらクリップボードのフォーマットは何を使ってるんでしょうか。 https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.dataformats?view=net-5.0 それ以外ならどういう仕組みなんでしょうか、何か手掛かりになるものがあれば助かります。 もし無理なら特定フォルダ作り定期的に監視して増えたファイルをロードしようと思いますが できればコントロールにドラッグしたいです、よろしくおねがいします。 ref structの強制using欲しいと思うのは俺だけ? C++みたいな暗黙でデストラクタ呼ばれる方式じゃなくてちゃんとusing書かないとコンパイルエラーになる感じのが欲しい
>>712 先に質問してたふらっとの方で既に解決しているがそれじゃダメだ 自分でanalyzer書けば警告でもエラーでもだせるよ そこまでやってる人がどれほどいるかは知らんが
環境依存だと他人に使わせるのはちょっと身が引けるな disposable ref structとでも書いたら絶対Dispose実装しないといけないし絶対using宣言しないといけないってなれば多少アンセーフな機能も公開しやすいんだけど需要は無さそうだな
50,000レコード、テキスト換算30MBある(想定最大値)JSONデータを取り回すのに向いている、ローカル用のDBエンジン(SQLiteのような)って何かありますか? 出来れば、Xamarin.Forms(Android)でも動くものを探しているのですが、他の方がどうやっているのか知りたいです
>>720 LiteDB。ずっと使ってる。 Linqで引けるから凄く便利。 >>722 LiteDB、良さそうですね。ちょっと試してみます。 >>721 俺の知らない別の使い方とか同じ名前の別のRedisがあるのかと思って1時間ググって見たけど、わからんかった。 Redisで、SQLite的な組み込みの使い方があるの? 比較したいので具体的なところ教えて欲しい…… つか5万レコードで何するかしらんが、そのままJsonで持つとかないわ
>>724 あるんだなそれが GTA5はそうしてたし 5万レコードぐらいの参照系で頻度が高いものだと結構あって、結局メモリにのせたりしないか? どうせメモリにのせるし、となると、JSONでもなんでもいいし。 LiteDB推したけど、そういう意味ではRedisはそこまで的外れだと俺は思わんかったぞ。
ソースジェネレーターの開発効率悪すぎやろ マクロと違って受動的な生成できるから便利だけど個人開発程度の規模だと返って遠回りになるな
>>732 StringBuilderオーバーライドしたSourceBuilder的なクラスがあればミスも無くなってマシになるんじゃないか もしくはUtf8JsonWriterと同じ感じでもいいな 自分で作れって話なんだけど、ソースジェネレーターってWinFormsのInitializeComponent筆頭に内部では元々あった訳だしMS社内ではSourceBuilder的なクラスは既にあるはずだから公開されるんじゃないかと期待してる WebView2でどんなページ開いてもスクロールバーが表示されずページの下の方が見ることができない。 htmlやcssでスクロールバーを非表示にしていないから、WebView2の設定を探してみたけど見つからず。 スクロールバーを表示させるにはどうしたらいいですか?
WinForm? WPF? WPFだと親子関係によっては親が子であるWebView2のレイアウト領域無限に取ったりしてるとか とりあえずWinFormでもWPFでも特にプロパティとかいじらず普通にブラウザとしてのスクロールバーは出る
>>739 WinFormです。 普通に出るのですか…何も出ないので残念です。 親コントロールからはみ出してるんかな WebView2側のDockを有効にしたら?
まさに今WebView2を使ってるところだけど普通にスクロール出るね >>741 が正解な気もするけど C#のComInterfaceってちょいちょい頭おかしいな これとかなんやねん HRESULT IEnumFORMATETC::Next(ULONG celt, FORMATETC *rgelt, ULONG *pceltFetched); ↓ IEnumFORMATETC.Next(int celt, FORMATETC[] rgelt, int[] pceltFetched); C#風にラッピングするなら普通はこうやろが int Next(FORMATETC[] rgelt, ref int pceltFetched); //Span<FORMATETC> rgeltなら尚良し
WEBフリーランスで年収1000万円超えないのはどう考えてもおかしい VIDEO エンジニアは技術力磨きすぎても金になりません VIDEO エンジニアはお金を追求してはいけないという年寄りを論破してみた VIDEO エンジニアが教えるの下手くそな理由を論理的に解説してみた【教育の本質】 VIDEO 派遣エージェントの言う事は9割ウソである理由【カモられない方法】 VIDEO ;t=231s IT業界のヤバすぎる落とし穴5選 VIDEO 絶対にエンジニアになってはいけない人とは【ハイクラス人材】 VIDEO 【エンジニア】正社員/派遣社員/フリーランスのメリット・デメリットについて VIDEO プログラミングスクールを否定する老害どもについて VIDEO ;t=506s public Foo<T>(byte[] dat) where T : new() { 〜 }; という定義の関数があります。通常は var IntData = Foo<int>(dat); とやって、バイト配列からインスタンスを作成するのですが、Tの部分をType型の変数を使ってインスタンスを作成したいのです。 上記の例でいうと int intValue = 0; var t = intValue.GetType(); var IntData = Foo<t>(dat); // 型ではなく変数なのでエラーとなる とやりたいのです。 なにか方法はないでしょうか。
>>749 説明を簡易にするためにintにしましたが、実際はclass/struct定義を指定して、 byte配列との相互変換するための自作ライブラリです。 クラス内クラスといった入れ子状態でも動くようにするために、内部から自分自身を 再帰呼び出しするのに、Type型の変数からジェネリックでの呼び出しが出来るように したいわけです。 >>748 これならできた static class Extensions { static T Foo<T>(this T x, byte[] dat ) where T:new() { return new T(); } } 型推論はコンパイラの機能。 実行時に決まる型をコンパイラに推論しろってのは無理筋 危険性を理解した上でBinaryFormatter使え案件では
>>754 どこから実行時なんて出てきたんだ? >>750 が書いてるdecltype相当の機能が欲しいって話だろ 俺も欲しいわ C#の標準ライブラリにもよくジェネリック版関数とType版関数があるようにそれ真似ればええだけやろ 後からジェネリック版が続々と追加されたことからも分かるようにType版はリフレクションに頼る羽目になるのでパフォーマンスに劣るがな そういやネットワークメッセージをルーティングするにあたってそのたびにDynamicInvokeしてるバカなコード書いてる奴思い出したな
>>756 そっちこそ何を言ってんの。 ジェネリックの型テンプレートはコンパイル時に確定している必要がある。 それをType型の変数tの値(当たり前だが実行時に決まる)からコンパイル時に 推論できるの? >>759 >>748 には > int intValue = 0; > var t = intValue.GetType(); > var IntData = Foo<t>(dat); って書いてあるけどやりたいのは int intValue = 0; var IntData = Foo<decltype(intValue)>(dat); // もちろんC#にはdecltypeはないからエラーになる だろ コンパイル時にintValueの型はわかってるから原理的にはできるはず >>748 普通にもう一段ジェネリック関数でラップしたらいいだけじゃん static T Foo<T>(T value, byte[] dat) where T : new() => Foo<T>(dat); int intValue = 0; var IntData = Foo(intValue, dat); まあそうなんだけど値を使わないのに引数に指定するのもなんか気持ち悪いし ※ 個人の感想です
>>762 var t = intValue.GetType();をする方がめちゃくちゃ気持ち悪い GetType()はオブジェクトヘッダからタイプ情報を抜き出すっていう実行時処理だからそれこそ求めてるものとは全く違うと思うけどな 逆にジェネリックは完全にコンパイル時計算なので>>761 とか>>754 ならほぼ確実にインライン展開される それに下手したらintに対してGetType()するとmalloc(sizeof(int32_t) + sizeof(void*) * 2);みたいな処理が内部で走って糞効率悪いぞ(Boxing)
>>763 > var t = intValue.GetType();をする方がめちゃくちゃ気持ち悪い まあ気持ち悪さの基準は人によって違うから、お前はそうなんだろうね よしわかった! リフレクションでジェネリックメソッドを生成しよう!
>>755 後出しですみません。 既存の機器と通信するためにByte配列との相互変換なのですが、 BCDとか、エンディアンの指定があるんです。 なので、BinaryFormatter は使えないんです。 >>761 なんとかなるかな? ちょっと試してみます。 アドバイスありがとう。 >>766 引数指定しなくていいバージョンも754が書いてくれてるだろ int intValue = 0; var IntData = intValue.Foo(dat); >>769 申し訳ないけどそれもっと気持ち悪いわw 1週間後にそのコード見て一瞬何してるのか戸惑う自信がある 久しぶりにC#で書いてるんで勘違いしてたら悪いんだけど var str = "abc"; で、strがstring?になるんだけど前からこうだっけ? 非null型にするには string str って書かないといけないんだっけ?
今でもそうじゃない。 Null許容オプションを変えればそうなるが、デフォルトは無効。
C#8.0以前と昔と同じ動きになるようにしてるからオプションデフォだと?付けてるんだぞたしか
unsafeでゴリゴリするのとNETの中間言語(IL)を直書きするのってどっちが速くなるのかな unsafeでゴリゴリも結局ILに直されるんだよね?
そらちゃんと最適化されたものがかけるならILじゃないの? 規模次第だけど大抵はunsafeが早くなると思う
ネットワークドライブ上のNASに映像ファイルをコピーする処理をTaskで非同期処理を おこなっているのですが、たまーにネットワークがきれるのかNASの問題なのか 転送がとまったきりになります CancelTokenでファイルごとにキャンセルは入れられるよう進捗ウィンドウを作ってるのですが File.Copyが1つのファイルで走り始めてから止まり、Exceptionも吐かないので 中断処理入れようにもどうにもならず とりあえずApplication.Exit()でアプリごと落としてお茶を濁しているのですが なにかうまい方法ありますか?
>>777 問題を良く理解してないけど まあ生ThreadならAbortできるね。 昔はデッドロックするバグがあるネイティブdllの関数呼ぶときにはこれ使ってた。 さすがに今時は別の方法が用意されてるはずだと思うけど HOMOHOMOHOMOHOMOHOMOHOMOHOMOHOMOHOMOHOMOHOMOHOMO
>>771-773 これすごい機能だな .NET 6から新規プロジェクト作成するとデフォルトで有効になると書いてある 引き継いだから知らなかった >>780 >>781 レスありがとうございます 返信遅くなりました 参考にいろいろやりましたが結局FTPで切断して中止させる方が簡単で 送信データ量などの進捗が拾えて残り時間の計算も簡単なので NASとFTPでやりとりすることに落ち着きました MSの.NETチームってアジア人少ないのか? 表に出てくるメンツ見てると黒人とかラテンアメリカンはちょいちょいいるのにアジア人がほぼいないんだが、 アメリカのIT企業って総じて黒人よりアジア人の方が従業員比率高いはずなのにおかしいだろ ポリコレソードで一刀両断して良いか?
ブリザードの闇を知ってからはアメリカのIT業界も色々とやべぇんだなとは思った ああいう闇があるからこそ日本人からは到底理解できないようなポリコレが流行るのも致し方ないと思えるようになったわ
Streamで非同期のreadを行っています。Stream.BeginRead(〜); このBeginReadをキャンセルするにはどうすれば良いのでしょうか。 通常の読み込みだと、BeginReadで指定したコールバック先でStream.EndRead(〜);を実行するのですが、1バイトも受信していない場合、EndReadを実行すると待ち状態になってしまいます。
StreamをDisposeすればEndReadで例外が出る
>>790 BeginRead をキャンセルしたいのは、同じストリームに出力を行いたいためです。 なので、Streamは破棄できません。 >>789 BeginRead 見たら ReadAsync の使用を検討しろって書いてあるからそうしたら? Readがデッドロックするような状態なら常識的にはWriteが成功するとは 考えにくい気がするんだけど違うのかなw
デッドロックは言葉の使いどころが違うと思う ReadAsyncでCancellationToken渡したとしても CancellationTokenSource.Cancelでキャンセルできるかどうかは具象クラスの実装次第なのに注意 .NET Core系は多分問題ないと思うけど.NET Framework系はあんまりサポートしてない印象
デッドロックがどこで出たかわかりませんが、やりたいのは名前付きパイプでのプロセス間の相互送受信です。
>>789 適当なこと書くけど、コールバック先の中でEndReadするのだと、データの読み取りが 完了しない限り実行されないのでダメなのではないかな? やるならばBeginReadの返却値であるIAsyncResultの内容を保存しておいて、Read 処理をやめたくなったら、保存しておいたIAsyncResultの値をEndReadに指定して 呼び出すんじゃないのかな? >>794 確かに「自分で自分の処理が完了するのを待つ」 状態に陥ることを指す場合が多いけど、 単純に何かの処理が終わらないことや終わらないことも デッドロックと言うと思うけどね。 >>795 それならReadをキャンセルする必要なんか最初からないのでは? >>797 デッドロックについて言ってること全部間違ってるように見える >>798-800 いや言うからw 言うまでもないけどdeadlockは座礁のこと。 つまり身動きが取れなくなることなんだよ。 それは自分で自分を待つケースに限らない。 デッドロックとは 対策に徹夜で3日以上かかるバグの事を指す
>>801 英語の元の意味と業界用語が違うなんていくらでもあるぞ NIC の promiscuous (mode) とか調べてみw そもそも名前付きパイプって同一のストリームを読み書き両用でつかえるのか?
組み込みの資格の問題集では、 デッドロックは、資源のたすき掛け タスクA が、資源X, Y の順にロックして、 タスクB が、資源Y, X の順にロックする ここで、どのタイミングでデッドロックが起きるか、という問題
最初から説明すると、やりたいのは.NET5のWorkerServiceで作成したWindowsサービスの状態をタスクトレイに表示することです。 Windowsサービスから直接タスクトレイに表示する事が出来ないということで、タスクトレイ表示用のフォームアプリを作成。 両者間でプロセス間通信を行い、フォームアプリからWorkerServiceへの問い合わせという形では問題なく通信できました。 ※フォームアプリ:送信専用/WorkerService:受信専用 ただ、WorkerServiceの状態が変わるのは希なことなので、フォームアプリから頻繁に問い合わせるのは無駄が多いので、 フォームアプリからWorkerServiceへの接続以外はWorkerService側からのPush通信を行うように修正しました。 フォームアプリ:受信待機、WorkerService:送信。WorkerService:受信待機、フォームアプリ:送信のテストは正常に終わりました。 送信はいつ発生するかわからないため、双方を受信待機にしたところ、その状態では送信が出来ません。 受信待機状態で無ければ送信出来るのは確認しているので、受信待機を解除出来れば送信出来ると考え、その方法を探している途中です。 >>806 上に書いているとおり、受信待機状態で無ければ送信できます。もちろん、受信待機状態で相手から送信されれば受信できます。 実際にテストし、確認しています。 >>796 コールバック先ではなく、送信用関数の頭でキャンセルするようにしています。 BeginReadの返り値を保存。キャンセルしたい場所でEndReadの引数に渡すようにしているのですが、EndReadを呼び出すとそのままだんまりです。 なので、なにか手順でもあるのかと思い、検索をかけたのですが解決法がわからないため、ここで質問しました。 >Windowsサービスから直接タスクトレイに表示する事が出来ない サービスの登録で「デスクトップとの対話を許可」してあれば表示出来ますよ?
送信がちゃんと動いてるならそこ変える必要なんてないし 送信と別に受信用の接続つくれば解決するんじゃ
>>813 .NET 5 ではサポートされないと、どこかで読んだ覚えが・・・ 参考になるWebPage等あれば教えてください。 直接やった方が単純なので・・・ Windows 管理ツール → サービス サービス名で右クリックしてプロパティ → ダイアログ → ログオン 「デスクトップとの対話をサービスに許可」にチェック HKLM\\SYSTEM\\CurrentControlSet\\Control\\Windows\\NoInteractiveServices 0にする必要があるかも
>>816 教えていただきたいのは設定の方法ではなく、.NET 5のServiceWorkerでタスクトレイにアイコンを表示する方法です・・・ さすがにサービス作るのは面倒だから同一プロセス内で試しただけだけど BeginRead中に普通にWriteできたよ NamedPipeXxxStreamをnewする時にPipeOptions.Asynchronous指定してる?
>>818 していませんでした。 サーバ、クライアント双方にオプションを指定し、Stream.Read中にStream.Writeが可能なことを確認しました。 ありがとうございます。 前提をすっ飛ばすと突拍子もない解決手段を思いつきそれを実現しようとしてしまい四苦八苦する典型例みたいですね
レジ袋有料化みたいな話だね ただ、批判する意図はないけど、位置の概念がないストリームなら普通「全二重」であるはずだ、 ってのはちょっと考えれば気づけたはずじゃなかなとは思う
出来ることを出来ないと思い込んじゃったとこから始まってるんだな。 サービスからのタスクトレイアイコン然り、Streamのリードライトも然り。
>位置の概念がないストリームなら普通「全二重」であるはずだ お前の勝手な思い込みだとしか思えん
>>822 その方法で判断してるなら既にいくつかバグ孕んでそう r/wを排他的にせざるをえない必然性や制約が存在しない限りわざわざ排他的にする合理性はないというだけの話。 馬鹿じゃないの。 というか、例えば2.0までのUSBは物理層が「半二重」だが、上位の層ではそんなことを 意識する必要はないようにしてある。 そんな制約を意識する必要があったらやってられないからだ。 必要もないのにそんな制約を課す馬鹿がどこにいる
双方向に通信できるか、一方向にしか通信できないことと、全二重半二重は別の概念じゃない? 双方向通信になって初めて半二重なのかと考える必要があるし、そもそもIPCをOSのAPIで使ってるときにそんなにシビアに考えることかな?という気がする
双方向のプロセス間通信なら、パイプじゃなくてIPC使ったほうが楽じゃね?
>>825 お前の言う「普通」はお前の思い込みだって指摘だが、普通が読めないとかどっから出てくる話だ そもそも位置の概念と双方向か片方向かは関係ないし 双方向のストリームは全2重であるべきだって意見なら理解しないではないが お前の希望が普通に実装されてるとは限らんのだよ 白鳥は普通白い、というのは全称命題(黒い白鳥はいない)ではない。 イキり馬鹿って本当に馬鹿で笑えるねw ファイルのように位置の概念があるストリームでは排他的にr/wされたら困るだろうw 馬鹿じゃなかろうかマジで
最近ヤフコメの規制が話題になってるけど、 webくんだりで他人に居丈高な態度を取る奴の動機の源泉(うだつ上がらない) なんて見え透いてるよねw 別にうだつ上がらないのは悪くないが(俺もそうだし) いい歳こいてそういう自分の動機を自覚できないのも、他人から自分がどう見えているかを 意識できないのもかなり痛々しいよねえw
>>831 普通のファイルのシークしながらの読み書きなら困る、はわかるんだけど、 それを一般化して、位置の概念のあるストリームで「普通」成り立つべき性質なのかよくわからない。 後学のために、いい例を教えてくれないか? そもそもファイルストリームって(単一ファイルでは)双方向通信に使えるものじゃないから、 全二重という思い込みがよく分からないし ワッチョイ的にデッドロックの意味勘違いしてた人っぽいし 全般的に用語の使い方がいい加減な人なんだろうなと思った
ファイルストリームって、追記モードで複数オープンされたファイル扱えないのか?
双方向のストリームなら、非排他的にアクセスされると困るという意見ならまあ理解はできる 排他的とか、自分以外のアクセスの話で、自分が全2重でアクセスできるかどうかとは無関係だがな
>>837 なるほど 全2重/半2重から排他/非排他の話になってるのは 話をずらそうとしてるんじゃなくて自分の中でもちゃんと区別できてないのか >>837 俺が用語を正確に使ってないのでなく君に読解力がないだけじゃないのかな。 俺はファイルストリームは「半二重」だと言ってるんだよ。わざわざ括弧を付けて。 括弧を付けているのは全二重/半二重という用語は普通はストリームを対象にした 用語ではないからだ。 というか、「必要のない制約をわざわざ課す馬鹿っているんですか?」 っていうのが俺の主張の本質なんだけど、その辺も含めて文脈読めないにも程があるね。
ああ、ほんとに双方向か片方向かと全/半2重の区別がついてないのね
全二重と半二重は鉄道で例えれば単線と複線の違いだよ。 RS485通信は半二重通信になるけどな。
>>843 またそれか。 片方向の文脈であれば全二重/半二重の区別は意味を持たない。 区別がついてないのは君じゃないの。マジで大丈夫か だいたい双方向とか片方向とかいう話がどっから出てくるのw 意味がわからないよ だから、必要もないのにr/wを排他的にする制約を課す馬鹿っているの?って話をしてるんだけど
次の展開予想すると、>>843 みたいな人はたぶんそれでも片方向/双方向の違いに固執して 「片方向っていうのは片方だけが能動的にr/wすることをいうんだ」みたいな話になるんだろうねw だから、だから何だよw この文脈でそれ重要ですか? ああ、排他的ってのは自分自身からのリードとライトについて言っているのか つまりお前の中では、全2重=非排他的 半2重=排他的 ってことなのね で、片方向っていうのは片方だけが能動的にr/wすること だと まあこれからも独自路線を行ってくれ。できればひっそりと
ファイルストリームに半二重ないやろ? 途中で方向変わるのか? 全二重もないし。
誰かこいつらの脳幹をdisconnectしてくれや
>>847 既に定義された用語と違う独自用語使うならスレ外でやれ デッドロックがどういう状態かの理解はできたか? 海外の機関車のハンドルとかについている装置 運転手が突発性の病気で倒れたりして手を離すと緊急停止する
>>853 それは Dead man's switch >>852 いい機会だから言っておくか。 それは違う。 言葉というのは置かれた文脈によって意味が変わる、 という中学生でも知っている事実を君が知らないだけじゃないの? だいたい文脈無視して意味不明な用語法の問題にすり替えて、 それを指摘されてもまだ「おかしいのはお前だ」と言い張る神経が俺には理解できない。 どうでもいいけど技術的なやり取りをするのに言葉の意味を明確に定義せずにするのは困難しか産まないと思うけどな。 独自用語でもちゃんと定義したらよろしい。 定義なしに文脈によって意味が変わるなんて言ってるのは技術者失格。
えっちょっと待って IT用語としての「デッドロック」なんて基本情報レベルな単語だしこの板に書き込むような人なら常識だと思ってたんだけど >>801 なんかはてっきりギャグとして書いてるか、さもなくば デッドロックって言葉の意味を知らない人を馬鹿にするためにわざと書いてると思ってたんだが ひょっとして本当に知らなかったの?? でもって無知を恥じるでもなく「読解力」とか言い出して責任転嫁してるの? 「ボクチャンわるくないもん、読み手が馬鹿なのが悪いんだもん」って言ったところで 馬鹿をさらしてる人が言い出したところで説得力ないと思うよ そのうえさらに自分の語用・論理展開が支離滅裂なのを棚に上げて「文脈」とか言い出して正当化してもなあ >それを指摘されてもまだ「おかしいのはお前だ」と言い張る神経が俺には理解できない。 その言葉を反芻すべきなのは>>857 だと思うよ 文脈無視して意味不明な用語法ってか さすが自分の常識は絶対だって自信がある人はちがうな で、技術論を人格攻撃で逃げようってか 相手してられん
お前らそろそろ落ち着きませんか? c#10の話でもしようぜ(錯乱)
特定の会社なりグループなりの小さなコミュニティ内で本来の定義とは異なる意味で用語が使われることはある そのコミュニティ内で齟齬なく意思疎通取れてるならまぁ問題ない ただその輪から出たら本来の意味でのみ使用すべきだし誤解を招きそうなら補足を入れるなりすればいい 定義にシビアなことが求められる技術者がこういう場で文脈によって変わるとか言っちゃうのはどうかと思う こういう場というのが便所の落書きじゃん、というなら否定はできんがw
みんなわかっているくせにいつまでも指摘しないのな。 デッドロックは暗礁でも座礁でもない。壊れた錠前のことだ。 https://www.nhk.or.jp/bunken/summary/kotoba/gimon/170.html IT 用語では、並列処理時に異なるプロセスが、互いが専有するリソースの解放を求めて睨み合い、うごけなくなってしまうリソース競合のことだ。それ以外の意味はない。 一般用語に行き詰まりという意味があったとして、IT 用語としてリソース競合という意味のズバリの状況定義があるのだから、IT に正しい理解がある人間なら、行き詰まりという一般的な意味でこの語を IT 関連の説明に使うことは絶対に避ける。他人に誤解させるし、伝わらないし、紛らわしいのが目に見えているから。 色々な意味で、非常に恥ずかしい部類の誤用。強弁もたいがいにしておくべき。 >>865 壊れた錠前とかそういう比喩でなく、 膠着状態を指す英単語だよ a situation in which a disagreement cannot be settled. そもそもdead rockなんて勘違いしてる奴いないじゃん 座礁って言葉使ってる奴はいるけど身動き取れなくなると説明付き リソース競合ってまた狭い意味だし座礁と同じで狭い意味でデッドロックを使ってる デッドロック(IT限定)でもプロセス競合のほうがまだまし しかも競合それ自体には行き詰まりの意味はない あくまでも競合による行き詰まりがデッドロック
座礁がdead rockからきた勘違い deadlockは身動き取れなくなるという意味はない 語源はdead+lockだから「壊れた錠前」であってるけど 今はその意味で使われることはない
>>870 座礁もdeadlockで間違いないし、rockとの勘違いでもない ただ英単語としての意味とIT用語としての意味を混同していたことが問題なだけ たんなるウェイトとデッドロックの区別がついてないバカがうだうだ言ってるだけ
>>865 壊れた錠前では無いよ。 行き詰まりそのもの。 リソースのlock自体、錠前のことではない。 名詞としてのlockは、カギで開け閉めするものに限られるので、リソースなどを指してない。輪留めとか、にっちもさっちもいかない状態とかそういうのを指す。 動詞としては、固定するだよ。 リソースを取得するのにカギが必要なら錠前だろうけど、カギは要らない。 多義語を知らない>>875 辞書引くだけで良いのに引けないんだね >>876 座礁って書いてある辞書教えて そしたら納得するよ >>877 納得はいらんけど、deadlockの自動詞、他動詞の意味調べてみ >>878 低頓する、低頓させる、「交渉は賃金問題で行き詰まった」、旺文社シニア英和辞典 行き詰まる、行き詰まらせる、低頓する、低頓させる、研究社リーダーズ英和辞典 さすがに「言葉の意味は文脈に依存する」ってことを知らない人がこれだけ多いと日本の将来心配になるねw この業界でデッドロックと言えば普通は非同期処理の文脈におけるデッドロックのことを指す、 これは最初から言っているように間違いない。 ただ必ずそうとは限らないと言ってるだけ。 イキってる皆さんがどう思おうが自由だけど、メソッドが制御を返さない状態のことをその原因を問わずに 「デッドロック」と呼ぶ用法は普通に使われてる。
そもそもデッドロックの意味とか、片方向と双方向の違いがどうのとか、そんなのどーでもいいわw 誰がそんな話してるんだよw 俺は時々ニュース系の板とかでネトウヨ馬鹿にして楽しませてもらってるけど、 この追いつめられると別の矮小な問題にすり替えて誤魔化して逃げるやり方って 連中そのものだねw
>メソッドが制御を返さない状態のことをその原因を問わずに「デッドロック」と呼ぶ まあ、たんなるロック待ちをデッドロックというやつはたまにはいるけどな あきらかに間違ってるわけで、それが普通とかもう話にならん >追いつめられると別の矮小な問題にすり替えて誤魔化して逃げる まさに今のお前だな
>>878 名詞が動詞化したものだから意味に違いはないよ 自動詞は「デッドロックになる」こと 他動詞は「デッドロックをもたらす」こと デッドロックとは「相対する2つの勢力が拮抗して事態が進展しない状態」 DBMSのデッドロックも非同期処理のデッドロックも状況が特化してるだけで意味は同じ 座礁は船と岩礁の力が拮抗してるってことなら その辺に転がってる石ころもdead rockだね >>884 deadlockの言う座礁する、座礁させるは日本語では比喩的な使われ方をする座礁だよ 交渉が座礁するとか交渉が暗礁に乗り上げるって意味での座礁 だから名詞じゃなく自(他)動詞 つまりデッドロックマンは何もかも間違ってると言いたい
>>885 「deadlockの言う座礁する、座礁させる」って何? どこから出てきたの? deadlockの言う? 交渉が座礁するとは日本語では言わない 交渉が暗礁に乗り上げたとしてもそれがデッドロックとは限らない 単なる待ち状態をデットロックと言ってるのと同じレベル >>887 少なくとも英辞郎には暗礁に乗り上げるって意味が載ってる 意味として膠着状態を指す慣用句としての暗礁に乗り上げるが使われてる >そもそもデッドロックの意味とか、片方向と双方向の違いがどうのとか、そんなのどーでもいいわw >誰がそんな話してるんだよw >追いつめられると別の矮小な問題にすり替えて誤魔化して逃げるやり方って連中そのものだねw まさにこれ 話を逸らすついでにスレ流して汚点を忘れさせようとしてるのが観える
>>891 東大話法、てのが大昔流行っていましたね ニコニコ弾幕ツールを作りたくてプログラミングとC#を初めて触ったのですが なにか参考になる動画や書籍資料等ないでしょうか? 簡単なメニュー程度なら作れるようになったんですがどうすれば弾幕打てるツールになるのか全く分かりません。 弾幕ツールソースとかでググってもそれっぽいのが全く出ず… 超初心者スレでも聞いたのですが回答もらえなかったのでこちらで…
>>895-896 回答ありがとうございます C#の知識だけじゃ実現できないのですね(;´Д`) C#の他にJavascriptとかCのAPIですか…3,4年はかかりそうですね… やったことが無駄にならないことが分かったので頑張ります 日にどれくらい時間かけるかにもよるけど早い人なら無学から始めても1ヶ月かからんやろ すでにほとんど完成品といえるようなパッケージがあるならなれてる人なら1日かからず完成する 始めて開発というものをするにあたって半年以上かかりそうなもんはモチベーション続かんから普通はおすすめできない もしこのコメントツールで年単位で掛かりそうだと感じたならもっと規模の小さい、長くても1ヶ月くらいで完成させられるかな?って想像できるようなものから始めたほうがいいと思うよ
>>897 Web関連は基本人間が理解出来る文字列でやり取りするから比較的難易度低い方 C#で作るならCの知識が必要になる場面なんて全くないはず Html、Css、JavaScriptの知識はどの言語で開発するにしても多少必要にはなってくるがそんな難しくはない >>897 あなたが作りたいツールを作るにも10年ぐらい前ならもっと簡単な知識でつくれたんだけど、Flashからhtml5になった頃から技術的なレベルが高くなったのも一因 ニコ動、ニコ生にしても以下のステップを1つづつ目標にして。 1.ニコ動かニコ生のURLを入力してそのページの内容を取得して表示なり取得確認する 2.そのページから必要な情報を選択して取得する 3.ニコ生の場合は、その情報からwebsocketに接続して各種情報を取得 4.ニコ動の場合は、その情報からコメント情報を取得する たぶんこの辺までできれば次どうすればいいかはわかると思うよ 今時はIEコンポーネントブラウザを使わないからだよ ニコニコの場合は (1)Javascriptでブラウザの拡張機能を書く (2)Pythonでダウンローダーや巡回、予約 で大半だよね、C#の出番はあまりないん
各サイトのルールは、robots.txt を見ればよい そこに、スクレイピングできる間隔などが書いてある
SQLのパラメータって使いまわせなかったっけ? 例えば下みたいなSQLがあったとして string sql = "UPDATE HOGE_TBL SET HOGE = :hoge WHERE HOGE = :hoge "; パラメータが下1つだけだったら更新件数0件で上手く動かない… cmd.Parameters.Add(new OracleParameter(":hoge", "huga")); Javaだと上手く動くけどC#は明示的に分けないとダメな感じ?
最近c言語習い始めた初心者なんですがwhile()のカッコ内の条件式に論理演算子を使うことはできますか もしできるならif文の時のように入力すればいいのでしょうか
>>910 ここはC#の相談室なんだが・・・ まあ、ifの書き方と同じで良いですよ。 C#10で文字列補間が大幅に最適化されたってことらしいけど、 stringオンリーの4個以内(Concatの最大引数以内)以外は$"{}"で繋げていった方がむしろパフォーマンス良くなるって認識でOK?
わけあってVisual Studioをインストールできない環境があるのですが、 その環境で Windows標準のC#コンパイラ(C:\Windows\WinSxS配下のcsc.exe) + Visual Studio Code でC#コンパイル環境を作成したいのですができますか? 以上、よろしくお願いいたします
>>915 積むかどうかは分からないですね 私は超能力者ではないので ビスマルク「愚者は経験に学び、 賢者は歴史に学ぶ」
そもそもコンパイル環境なら、VS Codeすらいらないんじゃ
VSはダメでVSCodeはインストールできるんだ よくわからない環境だな
ジャップには分からんだろうが世界的には9月からはもう2022年だぞ
コマンドが格納されたListを順番にサーバへ送信し、 1が返ってきたら次のコマンド送信、1以外かTimeoutしたら即中断みたいな処理を ractiveでサクッと書けますか? var cmdList=new List<string>{ cmd1, cmd2, ... }; cmdList .ToObservable() .TimeOut( ・・・ ) .SendCommand() .WaitResponse() .PostRecv(1だったら次のコマンド送信、1以外やタイムアウトなら処理中止); みたいな感じで。。
cmdList .ForEach(x => { if(x.SendAsync(cts.Token).Result == 1 ) throw new Exception() });
var results = await cmdList .ToAsyncEnumerble() .SlectAwait(async (c) => await c.SendAsync(cts.Token)) .TakeWhileAwait(async (r) => r == 1) ToArrayAsync();
タイムアウトで値や例外が返ってくるタイプだったらいいけど 時間経過で勝手にタイムアウト判定しろよってタイプだと詰みそう
ReactiveExtentions(System.Reactive名前空間 ver5.0)を使ってます。 自分なりに書いてみましたがこのライブラリの使い方がよくわかってない状態です。 (疑問点をコメントに書きました。分かる方教えてください) IDisposable d = cmdList .ToObservable() .Timeout( TimeSpan.FromSeconds( 3000 ) ) .Select( cmd => { var res = this.SendCommand( cmd ) // 自作のコマンド送信関数; return res; } ) .Where( res => res == 1 ) .Subscribe( res => /* ここで次のコマンド送信を行う書き方が分からない*/ res.ToString(), ex => Debug.WriteLine( ex.Message /* Timeout発生時 */ ), ()=> Debug.WriteLine( "Complete" /* 全ての送信完了?それとも1つだけ送信完了? */ ) ); >>927 やはりToAsyncEnumerbleからアプローチするべきなんですかね。。 Timeout関数の中身は TimeSpan.FromMilliseconds( 3000 ) // 3秒 の間違いでした
Rxは監視を行うもの 時系列に沿って要素が流れてくる時に使うもの なのである要素が流れてきた時に次の要素なんてのはまだ無い 要素が最初から揃ってるListから始めるからわからなくなる 最初から揃ってるなら普通にLinqかforeachを使う Listでなくストリームならこれでおk var d = CommandStream .Select(c => Send(c)) .Timeout(t) .TakeWhile(r => r == 1) .Subscribe();
次元の違う配列ではArray.Copy出来ないのでしょうか。 例) var foo = new int[4]; var bar = new int[3, 4]; ArrayCopy(foo,0,bar,0,4); // 例外発生 "The specified arrays must have the same number of dimensions." 1個づつコピーするしかないのでしょうか?
プリミティブ数値型の配列ならBuffer.BlockCopyできるけど まあ多次元配列なんて肩身が狭いもんだから仕方ないね
classを配列に保存しているから、BlockCopyもダメなんですよね・・・ あまり数も多くないはずなので、1つずつコピー(代入)していきます。
>>932 若干アンセーフだけど行ごとにならSpan利用すればマネージ型でも出来る for (int i = 0, len2 = b.GetLength(1); i < b.GetLength(0); i++) foo.CopyTo(MemoryMarshal.CreateSpan(ref bar[i, 0], len2)); MemoryMarshal.CreateSpan(ref bar[i, 0], 5000)とかやっても確か例外でないから最新の注意を払う必要はある まぁこうやってもソースの長さがデスト以内であれば問題は生じないけど
入力を検知したときにメソッドを実行する処理において、 要素Aがnullでなく(エラー防止)、Aの子要素Boolがtrueの場合のみ処理をスキップしたい場合に いい書き方はありますか? !A.Bool でメソッドを実行にしてしまうとAがnullだったときに実行されなくなってしまうので…… ひとまずgotoを使って以下のようにしているのですが、もっとスマートな書き方ありますでしょうか if (Input) { if(A != null){ if(A.Bool){ goto INPUTSKIP; } } Method(); } INPUTSKIP:
>>937 こう? if (Input) { if (A != null && A.Bool) { // INPUTSKIP } else { Method(); } } >>939 それを反転させて if (Input) { if (A == null || !A.Bool) { Method(); } } >>937 goto 使いたくないと言うなら A が null か、A.Bool が false の時に処理したいってことだから普通に if(A == null || !A.Bool){ 処理 } って書くか>>938 が言うnull条件演算子とnull合体演算子を使って if(!(A?.Bool ?? false)){ 処理 } でいける 個人的にはこの場合だと上の方がわかりやすいと思う AがnullだったときにORで並べてA.Boolの条件式を使ってしまうとそんなもんないよってエラーを吐くのでは、 と思い込んでいたのですが大丈夫なんですね……! !A.Boolだけで判定したときに怒られたので頭凝り固まってました! ありがとうございました!
>>945 ああーなるほど、ORの場合どれか1つでも満たされてれば実行されるから 左側が条件を満たしてたら右側はもうチェックされないのか!! 良いこと知れました! ありがとう! >>947 OrElse 使え >>948 > 論理演算子2つ並べるのがショート サーキット評価なんだけど とか言う玄人w はあ? C# ⇔ VB.Net --------------------- & ⇔ And && ⇔ AndAlso | ⇔ Or || ⇔ OrElse ってなってるだけやぞ
>>937 条件式をネストしたり&でつないだりと複雑にするのは難読性が高くなるから分けたほうがいいだろ どういう条件ならMthod()を呼ぶのか明確に if(Input){ //事前処理 judge=(A==null) ? true: //Aがnullのとき A.Bool==false ? true: //Aの子要素がfalseのとき false; //それ以外 if(judge) Method(); //共通処理 ... } >>952 が分かりやすく見えない… >>940 が誰が見ても一目瞭然でいいと思うわ シンプルな条件分岐なんだからこだわる必要ない skipするほうが例外的処理だろうからskip条件を明確にしてearly returnしたほうがいいと思う 論理式の細かい書き方よりも意図が伝わるかどうかのほうが大事 if (ShouldSkip(a)) { return; } Method(); bool ShouldSkip(A a) { return a?.Bool ?? false; }
メソッドにすんのはいいけど、>>937 が入力を検知したときメソッドを実行したいって言ってんだからその通りに書けばいい 設計書通りに条件分岐すりゃいいのに無駄に置き換えて実装する人多いけどなんなんだろうね if(入力検知(input, A)){ Method(); } bool 入力検知(bool input, A a){ return input && a != null && a.Bool; } 昼飯食いながら適当だから何か勘違いしてるかもしれないけど、>>937 って要は ある条件を満たした時だけMethodを実行したい、それだけでしょ? だったら四の五の言わずに素直にそう書くのが一番じゃないの。 if( input && (!A?.Bool ?? false)) Method(); 求めてるのは「もっとスマートな書き方」だからな 主観的な問題だから、俺らが言えるのは「こういう書き方もある」ってのだけ 正解(どれが一番か)を決めれるのは本人だけ
コードでも文章でも読み手に「要するにそれってどういうこと?」って思わせないのが一番。 これもコードでも文章でもそうだけど、読みにくいものは書いた本人がそこをよく理解せずに書いている。
ReSharperが薦めるように書き換えたら、何をしてるのかわからなくなった。
最近のc#はマルチパラダイムで構文が増えてカオスだ
>>955 ,956 >>937 を読む限りでは入力を検知する処理と 検知した後に特定の処理をスキップするかどうかを判断する処理は別じゃないのかな? 「A.Boolがtrueなら入力を検知しない(or 入力を無視する)」ってことなら 入力よりも先にA.Boolを確認するよね ちなみに回答ざっと見てこんなだな こういうのはコードが長くなっても動作が分かりやすい方がいいと思う >>939 ,940,952 おk >>954 ,955 バグあり >>960 それ。言語の表現力が豊かでも、自分やチームで一貫性を担保するのが面倒ξ >>963 そして、コーディング規約が底辺プログラマーに合わせられて生産性が低下する どうせ好き勝手に言語機能使って上がる生産性なんて微々たるもん
.net の 1.1 で書くとめちゃくちゃ不便で絶望するぞ
linqがある.NET Framework3.5ですら今これでやれって言われたら不便に感じるしなぁ 使えるものは使わせてもらった方が全然楽だわ
色々使えた方が個人的に楽だと思うのは否定しないが、もっともらしく「生産性が上がる」とか言っちゃうと 意外とそうでもなかったり。
心配しなくても今どき1.1で書いたり書かされたりすることはないでしょ
さすがに今どきvar使うなとかLINQ使うなとか言われないよね?
>>973 var使うとわからなくなるというのは名称が明示的になってないだけだと思うわ MS公式はvar推奨してるけどさすがにintとかstringとか基本的な型はvarにはしないな
明示的に型を書かないとダメなところ以外全部varで書くよ
最近はnew()で書けるようになったから、極力varはやめてる Hoge hoge = new(); 実装当初の想定通りlinqの戻りくらいかなvar、使うの。
はやくおれのレベルまで上がって来い 上で待ってるぞ
new()で書けるようになったけど、コンストラクタで初期設定値渡すようにしちゃうから全然使わんなぁ。 セッター潰してコンストラクタで設定するのが好き
C#がどんどんボクのしらないものになっていってる いっそC##やDと名乗っていただきたい (Dは既にある、は受け付けない)
>>983 ほんと、氷川きよしくらい変わってしまった if(item is {} a){ ... } null判定でこんな書き方あるんだな。Resharperさんに提案されて初めて知ったわ。 個人的にはあまり使いたくないけど。
>>989 それやるとaの色がローカル変数色にならず白のままになるのが不満なんだけど俺の環境だけか? >>989 C#9なら if (item is not null) って実に直感的に書けるから早くこっちにこいよ… ところでその式でaで受ける意味なくね? WinFormsを独学でやっているのですが教えて下さい そこそこの規模のソフトは作れるようになってますが VSで開発していくうえで、フォルダ構成ってどう考えればいいですかね いままではDB関連をDBフォルダ フォームはFormにまとめてさらにその中に機能別にフォルダを 細かいクラスファイルはClassというフォルダに DBとの受け渡し(sql書いてFormとの受け渡しModelみたいなもの?)は Modelというフォルダにまとめています プロの皆様はチームで作っていかれる際に 会社によりけりかもしれませんが一般的なフォルダ構成の考え方ってあるんでしょうか
そんなもの存在しないから適当でいいよ まぁあえて口出しするならFormフォルダはFormクラスと名前が被るからやめとけって位かな
なんのフォルダなのか理解できない プロジェクト(visual studio上でのプロジェクト)内じゃフォルダ切ることはないな プロジェクトがある程度大きくなったらクラスライブラリに分ける
>>995 そうなんですね、気をつけます >>996 たとえば画面数でも100超えて、機能部分のClassファイルも100越えてくると いちいち該当ファイル探すのが面倒でフォルダに分けたって感じです 前はPHPのフレームワークとか触ったときは たとえばcontroller model viewとフォルダも階層構造みたいになっていて そういう感覚もあります チームでやられていると、どこに何のファイルが散らばっているか わからなくなったりしないのですか? きちんと仕様書があるから関係ないのですかね やっぱりクラスライブラリ(DLL化?)もちゃんと理解しないと駄目ですよね 一人で作ってるので、DLL化するほうが手間な気がして避けてました どこに何がは命名の問題もあるんじゃないかな classも変数も先頭、末尾にそれが何か分かるように名前つけてるから名前順にソートされてればすぐわかる
>>998 機能ごとにProjectを作るんだよ。 lud20220926155303ca
このスレへの固定リンク: http://5chb.net/r/tech/1553075856/ ヒント: 5chスレのurlに
http ://xxxx.5ch
b .net/xxxx のように
b を入れるだけでここでスレ保存、閲覧できます。
TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓「C#, C♯, C#相談室 Part94 YouTube動画>9本 ->画像>4枚 」 を見た人も見ています:・C#, C♯, C#相談室 Part95 ・C#, C♯, C#相談室 Part93 ・C#, C♯, C#相談室 Part75 ・C#, C♯, C#相談室 Part79 ・C#, C♯, C#相談室 Part96 ・C#, C♯, C#相談室 Part90 ・C#, C♯, C#相談室 Part97 ・C♯相談室 Part20 ・C++相談室 part138 ・C++相談室 part143 ・C++相談室 part137 ・C++相談室 part135 ・C++相談室 part142 ・C++相談室 part136 ・C++相談室 part147 ・C++相談室 part134 ・C++相談室 part131 ・C++相談室 part146 ・C++相談室 part132 ・C++相談室 part141 ・C++相談室 part126 ・C++相談室 part153 ・C++相談室 part163 ・C++相談室 part161 ・C++相談室 part154 ・C++相談室 part124 ・C++相談室 part160 ・C++相談室 part159 ・C++相談室 part117 ・Cygwin + MinGW + GCC 相談室 Part 8 ・Cygwin + MinGW + GCC 相談室 Part 3 ・C#, C♯, C#相談室 Part98 (233) ・ネットワークプログラミング相談室 Port30 ・[特設]サマータイム対応相談室 ・初心者優先デジタル一眼質問・購入相談室 128 ・初心者優先デジタル一眼質問・購入相談室 127 ・初心者優先デジタル一眼質問・購入相談室 129 ・初心者優先デジタル一眼質問・購入相談室 104 ・初心者優先デジタル一眼質問・購入相談室 132 ・初心者優先デジタル一眼質問・購入相談室 123 ・初心者優先デジタル一眼質問・購入相談室 133 ・C++相談室 part165 (633) ・C++Builder相談室 Part21 (312) ・初心者優先デジタル一眼質問・購入相談室 97 ・初心者優先デジタル一眼質問・購入相談室 51 ・08070507787 ★ 真智宇 先生の悩み相談室 ・初心者優先デジタル一眼質問・購入相談室 107 ・初心者優先デジタル一眼質問・購入相談室 144 ・08070507787 ★ 真智宇 先生の悩み相談室 ・初心者優先デジタル一眼質問・購入相談室 145 ・初心者優先デジタル一眼質問・購入相談室 100 [無断転載禁止] ・ニー速お悩み相談室 ・孤男のボコボコ相談室 ・MFC相談室 mfc23d.dll ・自営業 悩みごと相談室 47 ・0からの、超初心者C++相談室 ・穴子たかしの夏休み子供相談室 ・衆道寺ホモ和尚の人生相談室 ・ライダーマンのお悩み相談室 ・【スノーボード】初級者なんでも相談室 ☆5 ・必ず誰かが相談に乗ってくれる恋愛相談室Part617 ・必ず誰かが相談に乗ってくれる恋愛相談室Part604
16:00:29 up 3 days, 2:24, 7 users, load average: 10.40, 10.28, 9.73
in 0.070681095123291 sec
@0.070681095123291@0b7 on 121506