X



ふらっと C#,C♯,C#(初心者用) Part151
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ワッチョイ 0f2c-S5yT)
垢版 |
2021/05/16(日) 10:45:59.00ID:8qTwOc620
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part150
https://mevius.5ch.net/test/read.cgi/tech/1616471904/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
https://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
https://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0003デフォルトの名無しさん (JP 0H9d-gSvD)
垢版 |
2021/05/16(日) 11:58:58.94ID:FgZG9punH
前スレ988ですみなさん相手にしてくださってありがとうございます
わかりやすく教えてくださって感謝しております
またしっくりこないなどと雑な表現をしてしまい申し訳ありませんでした
複数のテキスト上でそのようなコードを確認しておりましたので順序が逆では?と私が考えた書き順でも動作に問題はないのだろうとは理解しておりました
ただあくまでコードの処理が基本的に上から下への流れであるならばそのような書き方はハードウェアなりコンパイラなりに無駄な負担をかけているのでは?との思いもあり質問させていただきました
0004デフォルトの名無しさん (ワッチョイ 87b0-TVsO)
垢版 |
2021/05/16(日) 21:49:06.24ID:4Yy6RF+p0
ちょっとお尋ねします
VisualStudio2017の無償版でFormアプリ作って楽しんでますが
昔作って普通に動作していたexeが
1年ほど前のWin10のアプデ以降、動作が重く計算の出力も遅くなったような気がします
これはWin10のアプデによってバージョンが対応しなくなったのでしょうか?
このような場合、何をチェックすればいいのでしょうか?
0005デフォルトの名無しさん (ワッチョイ 03da-as9D)
垢版 |
2021/05/16(日) 21:56:47.00ID:w/v5e2LF0
intel CPUの脆弱性対応で計算能力落ちたんじゃね。
アムドのCPU載ったWindowsで試してみるとか

20H2だったらKB4601382適用でパフォーマンスアップするとかしないとか
0011デフォルトの名無しさん (ワッチョイ c7e6-JFKK)
垢版 |
2021/05/17(月) 23:47:33.48ID:243nH9hZ0
ウボァー
0012デフォルトの名無しさん (ワッチョイ 9f33-SQHu)
垢版 |
2021/05/18(火) 01:57:21.28ID:eaycUWDk0
>>4
そんな事くらいで対応しなくなったら、世の中のソフトは大混乱になってる。
ログやデータが増えて計算量が増えたとか、ディスクアクセスが遅くなってるとかじゃないの?
明らかに遅いのならループ処理中に例外が出てるとかかもしれない。
調査方法はたくさんありますが、まずはタスクマネージャーで確認してみるのが良いと思います。
0013デフォルトの名無しさん (スッップ Sd2f-cwNg)
垢版 |
2021/05/18(火) 13:55:59.54ID:awNVHcWQd
質問です。
Form1と2とクラスが1つあって、クラスにForm1と2のTextBox等をを使用してファイル書込み、作成、削除、追加等のコード書きました。
Form1表示→入力→Form2表示→入力→閉じるまで間に何度かクラスを使用したい。
フォーム1のみならthisを渡して、TextBoxをPublicにしてやればいいのはネット見て分かったのですが、Form2も渡すとなると、Form2に辿り着く前にクラス使用する時はどうしたらいいですか?
0014デフォルトの名無しさん (ワッチョイ fb62-EUHA)
垢版 |
2021/05/18(火) 15:50:09.78ID:/vNHi2oE0
>>13
何をしたいのかよく分からないけど、Formのコントローラーを公開するのはよくない
Form1とForm2で共通で使いたいクラスあるなら、呼び出し元で定義してそれぞれのFormに投げるじゃダメなの?

class Form1{
private クラス _クラス;
Form1(クラス c){ _クラス = c; }
}

class Form2{
private クラス _クラス;
Form2(クラス c){ _クラス = c; }
}

class クラス{}
0016デフォルトの名無しさん (ワッチョイ dbbd-cwNg)
垢版 |
2021/05/18(火) 21:13:32.38ID:0pXo6EN80
VBAのコードをVisual Studioでコツコツ書いて勉強してます。
@VBAではフォームに書き込んだ内容をエクセルシートの印刷用のシート(前もって作成済)へ転記して印刷という内容なんですが、エクセルでなくやる方法ってありますか?※転記内容は文字列や数字のみです。

AVBAでいう標準モジュール≒クラス?

BGetSet?ネットでもよく使いどころが分からないのですが、VBAで例えるならどんな感じですか?
0017デフォルトの名無しさん (アウアウウー Sa1d-gSvD)
垢版 |
2021/05/18(火) 22:47:16.69ID:VzWE2qZQa
これ煽りとかじゃなくて真面目な話だけど、他人に用件を過不足なく伝える能力って
プログラミングスキルより何百倍も重要だよw

ちっとは「この書き方で自分の言いたいことを理解してもらえるだろうか?」って視点を持ってほしい

>>13
他の人も書いてるけど基本的にUI(Form)の参照を「クラス」に握らせるのはNG。
なんでダメなのか今は理解できないかもしれないがそのうち自然と分かってくる。
逆、つまりFormが「クラス」の参照を握る方向で

>>16
@C#はオフィス製品じゃないんで少なくとも標準では
お手軽に同じことを実現する方法は用意されてない

AVBAにもクラスモジュールはあるよ。もちろん完全に同じ物ではないけど

Bプロパティのことを言ってるならVBAにもプロパティはある。もちろん(以下略
0018デフォルトの名無しさん (ブーイモ MM5b-M3SR)
垢版 |
2021/05/18(火) 23:13:37.98ID:zfq3U+DUM
VBAってスレ違いくね?
0019デフォルトの名無しさん (ブーイモ MM5b-M3SR)
垢版 |
2021/05/18(火) 23:14:49.24ID:zfq3U+DUM
ああごめん。VBAのをC#に移植してるってことか。脊髄反射してもた。スンマソ
0020デフォルトの名無しさん (ワッチョイ aba7-4lYq)
垢版 |
2021/05/18(火) 23:35:28.59ID:Txr9X7xM0
>>17
そんなの書いてみてレスもらわなきゃわかるわけないじゃん
無駄なアドバイスしてるの気が付かないかな?
何度も書いてみて人から反応をもらって鍛える能力でしょそれ
0024デフォルトの名無しさん (スフッ Sdd7-Ratl)
垢版 |
2021/05/19(水) 07:27:19.64ID:yWkX4iecd
>>16
ExcelVBAのことがよく判らなくて、答えづらい。っていうか、その変換にストレスが発生してない?
お勉強なら、VBAのことは忘れてゼロから始めた方が良いんじゃないかと。
0025デフォルトの名無しさん (ワッチョイ c7e6-JFKK)
垢版 |
2021/05/19(水) 07:34:53.84ID:AMEX05Gv0
単に印刷をしたいだけだろ
ギョーカイでは印刷用コンポーネント買ってこいで一蹴される案件
0026デフォルトの名無しさん (ブーイモ MM5b-M3SR)
垢版 |
2021/05/19(水) 08:48:51.66ID:dvesxogvM
印刷コンポーネントって標準で付いてないっけ?
0027デフォルトの名無しさん (スッップ Sd2f-cwNg)
垢版 |
2021/05/19(水) 09:40:36.03ID:TmTcYE5Zd
>>14>>17 ありがとうございます。説明たらずですみません。ネットみてこんな感じで作成しましたが、こういう作りはよろしくないってことですよね?クラスにxmlファイル関連の処理をまとめたいなと思ったのですが...

{}等々は省略します。
class ClsXml
Public Frm1 frm1
Public Frm2 frm2

Public ClsXml(Frm1 frm_1,Frm2 frm_2)
  frm1=frm_1
  frm2=frm_2

 Public void aaa
frm1のコンコロール使用

 Public void bbb
frm2のコントロール使用
 
 Public void ccc
frm1とfrm2のコンコロール使用

※Frm1
ClsXml clsXml = new ClsXml clsXml(this,null)

※Frm2
ClsXml clsXml = new ClsXml clsXml(Frm1,This)
0029デフォルトの名無しさん (ワッチョイ 2b7b-gSvD)
垢版 |
2021/05/19(水) 10:08:02.04ID:C6qGRFkz0
C#のプログラミング本を読んでいるのですけど
C#という言語はnewしても失敗することはないのでしょうか
newの戻り値を確認したり
try catchで囲んだりてませんよね
Designer.csをみてもnewだけしてて戻り値を確認していません

識者の方教えてください。よろしくお願いします。
0030デフォルトの名無しさん (ラクッペペ MM17-JFKK)
垢版 |
2021/05/19(水) 10:32:55.61ID:TDEniZJiM
>>26
説明するのが面倒だから一蹴するんだよ
真に受けて買うのも別に悪くない選択
0031デフォルトの名無しさん (ラクッペペ MM17-JFKK)
垢版 |
2021/05/19(水) 10:37:43.80ID:TDEniZJiM
>>29
catchしたところで他に代替方法がないんだから
諦めてそこで試合終了ですよ
0032デフォルトの名無しさん (ワッチョイ a12d-u+PU)
垢版 |
2021/05/19(水) 10:42:01.36ID:RX1B9Flf0
>>29
使い方を間違えていなければコンストラクタで例外が発生しないクラスが多いので
基本的にはコンストラクで例外が発生する場合はバグであり使い方を修正する。
正しい使い方でもコンストラクタで例外が発生する場合があるクラスについては例外を捕捉してフォローする。
0033デフォルトの名無しさん (ワッチョイ ff01-vB/y)
垢版 |
2021/05/19(水) 11:56:33.37ID:u9Tr9lyP0
>>27
よくないね

依存性の方向は基本的に「個別処理 ―> 共通処理」
個別処理が共通処理に依存するのはいいが逆はよくない
変更に対して弱くなるから

各フォームが個別処理でXMLの読み書きが共通処理なので
フォームがXMLクラスに依存するのはよくて
XMLクラスが各フォームに依存するのはよくないということ
003429 (ワッチョイ 2b7b-gSvD)
垢版 |
2021/05/19(水) 11:59:42.08ID:C6qGRFkz0
>>31
>>32
回答ありがとうございます
古い人間なもので常に以下のようなコードと思い込んでいました

p = new hogeCalss();
if (!p) {
print("失敗しました");
exit();
}

---------------------------------
try {
p = new hogeClass();
}
catch(exception) {
print("失敗しました");
exit();
}
0035デフォルトの名無しさん (アウアウエー Sa93-PbQN)
垢版 |
2021/05/19(水) 12:09:28.47ID:5VIb1gQWa
>>27
Xmlの処理をするクラスなのになんでFormを使うのか?
ということに疑問を持つべき

>>29
コンストラクタでエラーが発生したら例外を投げて
例外を受けてどう処理するかはその場次第で様々なので
無視して上位に任せるのもその場でハンドリングするのも間違いではない
0037デフォルトの名無しさん (ワッチョイ f384-gIXh)
垢版 |
2021/05/19(水) 18:35:07.68ID:kJekIUOX0
>>27
何となく何がおかしいか分かったかも
Formのプロパティを外からいじるのいくないとかはおいといて言っていることを
無理やり形にすると多分こんな感じかな
class control
 ClsXml cx=new ClsXml
 cx.aaa
 cx.bbb
 cx.ccc

class ClsXml
Public ClsXml()
 Form frm1=new Form
 From frm2=new From

 Public void aaa
  form1 progress

 public  void bbb
  form2 progress

 public void ccc
  form1&2 progress

Formを独自拡張する必要があるならば、ぞれぞれのFormクラスを作る必要があるけど
そういうことじゃないのではないかと
元の書き方だと違うインスタンスが同じインスタンスのように扱われているのでForm1では
Form1側の操作しか出来ないと思うよ
あとFormを制御する人がいないのでプログラムとして成立しないかな
003829 (ワッチョイ 2b7b-gSvD)
垢版 |
2021/05/19(水) 19:01:35.29ID:C6qGRFkz0
>>36
Application.ThreadExceptionイベント
UnhandledExceptionイベント
ググってみます
ありがとうございました
0039デフォルトの名無しさん (スップ Sdcf-dNWz)
垢版 |
2021/05/20(木) 17:15:54.44ID:bilBOnqPd
質問です。
xamarinとC#でAndroidアプリを作成していて、ボタン押下でAndroidからPCの指定の共有サーバーにWi-Fi経由でSMB通信をしてファイル転送する機能があるのですが、それをUSB経由で接続したPCの指定のフォルダに転送する機能に変更したいと思っています。調べてみても方法が分からず、どうやってやればいいのかお教えいただけないでしょうか?
0042デフォルトの名無しさん (スップ Sdcf-dNWz)
垢版 |
2021/05/20(木) 19:20:45.57ID:bilBOnqPd
>>40
>>41
回答ありがとうございます。
SMB通信の前はWindows PhoneからPCの指定のフォルダへUSB経由でFTP通信をして指定したフォルダに転送していたのですが、これもandroidだとできない感じでしょうか?
0043デフォルトの名無しさん (アウアウウー Sac7-7S+s)
垢版 |
2021/05/21(金) 00:18:51.38ID:uT4ElnGZa
>>42
詳しくないので適当に聞いてね。
結局PC側からUSB接続のアンドロイトが何に見えているかが肝だよねたぶん。

ただのマスストレージに見えてるなら他の人が書いてるように
Android側からPCに対しては何もできない(PC側のアプリでAndroidの
ストレージからファイルを持ってくることは可能なはず)

Androidにそんな器用なことができるのか知らないけど、仮にNICのふりができるなら
理屈上はAndroid側からPCの共有フォルダにアクセスは可能なはずだと思うけど
かなりハードル高そうだよね
0045デフォルトの名無しさん (ワッチョイ cebb-T0p4)
垢版 |
2021/05/21(金) 14:30:29.31ID:i5DLTQw90
Visual StudioでGitを使う場合、Gitによる管理が不要なファイルのために自動で.gitignoreを作ってくれると思います
.NET 5のコマンドラインから同じようなことをするにはどうすれば良いのでしょうか?(手書きなのでしょうか?)
0047デフォルトの名無しさん (ワッチョイ cebb-T0p4)
垢版 |
2021/05/21(金) 15:07:41.48ID:i5DLTQw90
>>46
全然知らなかったよ、ありがとう!
0048デフォルトの名無しさん (スップ Sd5a-dHWj)
垢版 |
2021/05/21(金) 18:18:47.45ID:r4fhOYFqd
フォームが複数あって入力された文字列やチェックBoxの状態記憶して、フォームが閉じて再び開いた時に同じ状態に戻したいんですがどんな方法がありますか?
0049デフォルトの名無しさん (ラクッペペ MMb6-jLf6)
垢版 |
2021/05/21(金) 18:38:24.30ID:P35wDmNWM
フォームのコントロールのプロパティを取得したり設定したりします
0053デフォルトの名無しさん (ワッチョイ 5b36-RMa4)
垢版 |
2021/05/22(土) 08:57:11.87ID:hnUmAMvp0
Winform(.net 4.8)でentity frameworkにてクラス内の値を変換したいのですがどのようにするのでしょうか
public class StringValue
{
public StringValue(string s) { Value = s; }
public string Value { get; set; }
}
モデル内
public class Sample
{
[NotMapped]
public StringValue dummy { get; set; }
public string value { get => dummy.Value; private set => dummy = new StringValue(value); }
}
今は上記のような感じでStringValueをvalueに見立ててデータベース上でnvarchar:valueとして扱っています
コード上はクラスで扱いつつデータベースでは別の型として扱うという事をしたいです
EFCoreではHasConversionでできそうですがEFではそう言ったのは無いのでしょうか?
0055デフォルトの名無しさん (ワッチョイ 9ae4-aEtu)
垢版 |
2021/05/23(日) 21:45:22.13ID:y8mHkt/k0
オブジェクト初期化子とコンストラクタは何が違うのでしょうか?
見た目はインスタンス作成時に()を付与するかどうかの違いがありますが、やってる事は同じに見えます…
別物として扱っているのは理由があるからなのだと思いますがイメージが掴めません
初歩的な質問ですみませんが教えてください
0057デフォルトの名無しさん (アウアウエー Sa52-hK5l)
垢版 |
2021/05/23(日) 22:02:16.32ID:RNjOm9Rva
コンストラクタを実行したあと属性に代入するのが初期化子
コンストラクタにはインスタンス化時に絶対に必要な処理を書く
初期化子にはどっちでもいいオプションを書く
0058デフォルトの名無しさん (スップ Sdba-dHWj)
垢版 |
2021/05/24(月) 18:26:23.84ID:x4lG9/QZd
>>27
私感じでやっちゃってますね。みんなさんが言うようにclassでformを使うのは良くないのは言われれば分かりますが、Formを使わないやり方がPublic static使う方法しか分からないし、ネット検索かけてもformを渡してるやり方ばかり出てきますね。

Public static string stA
Public static string stB

Public void AddFile
〇〇.add stA + stB

先生がネット故に...みなさんはどこで学ぶんですか?
0063デフォルトの名無しさん (ワッチョイ 1b73-RI+G)
垢版 |
2021/05/25(火) 06:29:00.67ID:PTaC3ctB0
LangVersionか何か判定する方法ある?
実際はLangVersionを判定したいわけじゃなく、
C#が「interfaceのデフォルトが使えるバージョン」ならデフォルト実装を用意したものを、
そうでなければデフォルト実装はなし、
というのを#ifプリプロセッサな何かで切り替えたいんだが。
0065デフォルトの名無しさん (アウアウウー Sac7-7S+s)
垢版 |
2021/05/25(火) 13:30:21.38ID:FpV6PuqQa
あればここに載せてるだろうからないんでしょうね
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/preprocessor-directives

まああってもC#のプリプロセッサのシンボルは定義済みかどうかしか評価できないから
既述が大変そうだよね

結局VS使うならプロジェクトのプロパティーで自分でシンボル定義してソリューション構成を
手動で切り替えるしかないんじゃないのかな
0067デフォルトの名無しさん (ワッチョイ dfb0-5BAZ)
垢版 |
2021/05/26(水) 09:59:35.98ID:qJ3DTor20
最近VisualStudio2017から2019に変えたんだけど
WindowsAPIは使えなくなったの?
2017で書いたプロジェクトなら2019で読み込んで動くけど
直接2019から同じこコード書き始めると「現在のコンテキストには名前が見つかりません」
ってでて波線がで警告表示される
これは2019から始まったターゲットフレームワークとかいう奴が影響してるのか?
どうしたら以前のようにWindowsAPIが使えますか?
0068デフォルトの名無しさん (ワッチョイ 4e2c-dnFn)
垢版 |
2021/05/26(水) 10:14:15.14ID:FSQy2KRV0
普通にやれば普通に今まで通り動くので
何かが普通にできてないんだろう としか言えん

Windows API呼び出すならTargetFrameworkはnet5-windowsにすべきではあるけど
別にそれは必要条件ではない
単にnet5でも問題ない(Windows以外だと実行時例外になるだけ)
0069デフォルトの名無しさん (ワッチョイ dfb0-5BAZ)
垢版 |
2021/05/26(水) 10:49:28.94ID:qJ3DTor20
>>68
resありがとうございます
.NET5で試してもできませんでした
ただし「usinディレクティブか、アセンブリの参照が違うのでは?」
と具体的なメッセージに変わりましたから、
何か探しに行ってくれてるようですね
これは単純にIDEとしてのVS2019のバグということでしょうかね?
0073デフォルトの名無しさん (エムゾネ FFba-4Cki)
垢版 |
2021/05/26(水) 11:25:04.91ID:2/BE6bBSF
ソースと環境を晒すべき
0074デフォルトの名無しさん (ワッチョイ fa4b-f9J/)
垢版 |
2021/05/26(水) 12:15:50.54ID:Q8/sORJB0
ブラウザからSQL文とパラメータを受け取って、PostgreSQLのテーブルを検索し、結果を返すWebAPIを作成しています。
PostgreSQLとのやり取りはDapperを使っており、パラメータは匿名型で記述しています。

ブラウザからSQL文とパラメータを送る際にjson形式でシリアライズしているのですが、これをAPI側でデシリアライズを行うと匿名型が元と違う形になってしまいます。

var foo = new { Key1 = 1, Key2 = 2};
// foo = { Key1 = 1, Key2 = 2 }

var strJson = JsonSerializer.Serialize(foo);
// strJson = "{\"Key1\":1,\"Key2\":2}"

var bar = JsonSerializer.Deserialize<object>(strJson);
// bar = ValueKind = Object : "{"Key1":1,"Key2":2}"

デシリアライズした時に、シリアライズ前と同じ状態にすることは出来ないのでしょうか。
0084デフォルトの名無しさん (ワッチョイ 1b73-RI+G)
垢版 |
2021/05/26(水) 22:04:01.82ID:c9Vxajem0
いや普通基本は同期でヘビーなとこだけ非同期にすべきだよ。
全てのアプリが何もかも全部のステップ非同期なんかにしたら、
全体的にはCPU食うだけでメッチャ重くなる。
0087デフォルトの名無しさん (ワッチョイ 1b73-RI+G)
垢版 |
2021/05/26(水) 23:02:37.43ID:c9Vxajem0
それだとまずは全てasyncで制作したあと、
ああここは意味がないなと、ひとつひとつあたって普通の同期に変えていく作業するわけでしょ。

だって基本まずはすべて非同期といってるわけだから。
0092デフォルトの名無しさん (ラクッペペ MMb6-9F53)
垢版 |
2021/05/27(木) 08:30:07.04ID:f+HvaIKyM
非同期中に他になにかやりたいことがあれば非同期

ただ待ってるだけなら同期
0094デフォルトの名無しさん (ブーイモ MM26-LeRE)
垢版 |
2021/05/27(木) 09:12:32.37ID:7nNOolzWM
基本は非同期でいいんだよ
どうせデータアクセスやらAPIコールで呼び出し元まで遡って非同期になる
まずは非同期で考えて考えた結果こいつは非同期にする価値がないと気付いたら同期にする
それでおk
例えばドメインクラスなどはすぐに非同期にする価値ねえなと気付く筈なので同期にすればよい

初心者がやりがちなミスは非同期にすべきインターフェースメソッド、デリゲートを同期で定義してしまうことだ
これは同期デフォルト脳の弊害であるがこのミスは後々ボディブローのように効いてくる
まずは非同期で考えてじっくり考えた結果非同期にする価値なしとわかったら同期にする
こうすればゴミのようなインターフェース、デリゲートに苛つかなくて済む
0097デフォルトの名無しさん (ワッチョイ 275f-4Cki)
垢版 |
2021/05/27(木) 14:40:09.29ID:U0nLnJgd0
Java は throw が伝染する・・・
C# は async が伝染する・・・
0101デフォルトの名無しさん (ブーイモ MM26-yRoj)
垢版 |
2021/05/27(木) 22:44:17.51ID:GWsz6i+wM
>>99
x async使ったことないお
o async使ったことないよ

日本語は正確に。
0102デフォルトの名無しさん (ワッチョイ f954-W1af)
垢版 |
2021/05/28(金) 03:02:26.12ID:ukkv+1yM0
使うのWinFormsだからってナメてたらオーナードローと追加機能まみれで、チャリが戦車になるレベルで原型とどめてないコントロールばっか。
WPFのほうがだいぶ楽だったよ・・・タスケテ・・・
0107デフォルトの名無しさん (スップ Sdb3-K2R4)
垢版 |
2021/05/28(金) 18:38:06.39ID:AMiYNwV2d
formで入力→計算→出力てな感じなもの作成してます。
exe起動後一番最初に入力するTextBox1に番号記号を入力します。例A−101など。
それを入力した時から他の人が同一番号記号を使用出来なくなるようにしたいんですがどうすればいいですか?
0110デフォルトの名無しさん (ワッチョイ 5136-xFqk)
垢版 |
2021/05/29(土) 08:53:16.72ID:mnYn/SGN0
データベースからデータグリッドビューに表示させる際の文字列のソートが分かりません
データベース
id(int:主キー,自動採番), code(string:値としては数値で構成"01","02","10"等), name(string)
OrderByとかの使い方が良く分かってないだけだと思うのですがうまくいきません
//登録
Test.SaveChanges();
//登録後、ソートしてコード順で表示したい
Test.DbSetEntity.Where(x => x.id == id).Load();
DGVView.DataSource = DbSetEntity.Local.ToBindingList();

ご教授いただければ幸いです
0111デフォルトの名無しさん (ワッチョイ 99b0-4Wjq)
垢版 |
2021/05/30(日) 14:35:56.95ID:borQq+I40
20行程度の1つのメソッドだけポリモーフィズム使って処理させたい&継承するクラスが複数有るとき、
サブクラス毎にファイル別ける? 同じファイルに全部書く?

今までファイル別けてたんだけど、なんか邪魔なのでファイル1個で良い気がしてきた
ただ、そうすると今度はファイル名に悩む
フォルダ作ってそこにファイル別けて全部ぶち込めば良いのかな?
0112デフォルトの名無しさん (ブーイモ MM75-WbRb)
垢版 |
2021/05/30(日) 14:53:56.25ID:McAyMcZBM
1メソッドだけの差し替えならデリゲート使えよ
それはともかく、俺は仕事では突っ込まれるのが面倒だから必ず分ける
プライベートなら適当に意味のある単位で纏めることもある
0113デフォルトの名無しさん (テテンテンテン MM4b-0MMr)
垢版 |
2021/05/30(日) 15:12:33.91ID:AeBNzYwcM
サブクラスをその継承元クラス内にインナークラスとして定義する前提で同じファイルに書く
仮にそのクラスが肥大化したら「BaseClass.ExtendedClass.cs」って別ファイルにpartialで切り出す
ってのを自分はよくやる

ただしインナークラスをそういう風に使うのは一般的にはやっちゃいけない気もする
0114デフォルトの名無しさん (ブーイモ MM75-WbRb)
垢版 |
2021/05/30(日) 15:21:34.04ID:McAyMcZBM
そもそも1メソッドだけなのにあえて多態を使う理由は実装を分散させたいからに尽きるわけで、
結局1ファイルに纏めるんならそれもうswitchでもええやろという気はする
0116デフォルトの名無しさん (アウアウウー Sac5-f5pr)
垢版 |
2021/05/30(日) 15:45:56.38ID:Petj9nTfa
>>111
1ファイルに複数の型があっても全然構わないと思うよ。
Enumにそんな原則誰も適用してないよね?

VSにはクラスビューもあるし必要なら簡単に定義場所に飛べるので
ファイル名にこだわる必要はあまりないと思う。
だから単にベースクラスの名前でもいいと思うけど、気になるなら
「Hogeとその派生クラス」みたいにするだけじゃないの?
0122121 (ワッチョイ d99c-aH3h)
垢版 |
2021/05/30(日) 23:02:02.71ID:bQ1dCiB60
✘ コードも複製される勘違いしてる
○ コードも複製されると勘違いしてる
0125デフォルトの名無しさん (ワッチョイ 93e4-48kP)
垢版 |
2021/06/01(火) 06:28:16.16ID:jX3vW8oh0
jsonの逆シリアル化について教えてください
以下のコードでローカルのjsonファイルを読み込み、逆シリアル化をしてオブジェクトを得たいと考えています

@var readJsonFile = File.ReadAllText(filePath);

Avar jsonDeserialize =JsonSerializer.Deserialize<List<Food>>(readJsonFile);

public class Food{
public string Name{get;set;}
public int Price{get;set;}
}

しかしAの部分が上手く行きません。
変数readJsonFileには所定のjsonファイルの内容を取得出来ているのですが、jsonDeserializeには値が入ってきません。
具体的にはデバッグで変数の中身を確認すると、jsonファイルに記述している項目数だけ要素は取得していますが、Name:null、Price:0の様にファイルに記載しているName等のデータがありません。
エラーなどもなく、何が原因なのか突き止めることが出来ません…。
初歩的な質問で申し訳ありませんがアドバイス頂きたいです。

長文失礼しました。
0126デフォルトの名無しさん (ワッチョイ f101-upCQ)
垢版 |
2021/06/01(火) 06:43:19.75ID:H3fSzkBp0
そのjson上げてもらわないと何も回答できないのでは
0131デフォルトの名無しさん (アウアウクー MM0d-48kP)
垢版 |
2021/06/01(火) 07:54:24.27ID:ILsKj6x4M
>>128
シリアライズは試していません
シリアル化、逆シリアル化はそれぞれ単体で利用出来るものと認識していたのですが、そうではないのでしょうか?


また以下の記事の注釈の箇所を参考にしたのでDataContractJsonSerializerは今回利用していないです
https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.serialization.json.datacontractjsonserializer
0132デフォルトの名無しさん (ワッチョイ 4b7c-Y7ma)
垢版 |
2021/06/01(火) 09:10:03.91ID:9OJVryW40
JSONもC#も(JavaScriptも)CaseSensitive
NameなんてプロパティJSONに含まれてない
DataContractJsonSerializerだとJSONのcamelCaseとC#のPascalCaseをよろしくやってくれる機能はないんだっけ
ならNameとPriceにそれぞれDataMember属性付けて
[DataMember(Name = "name")] public string Name { get; set; }
みたいにする
0134デフォルトの名無しさん (アウアウクー MM0d-48kP)
垢版 |
2021/06/01(火) 13:01:10.23ID:ILsKj6x4M
>>133
ありがとうございます
PropertyNamingPolicyを指定すると所望の動作をしてくれました

試しに上記の指定をせず、jsonファイル側の要素をname→Name、price→Priceのように大文字にすると読み込む事も確認出来ました
ただ、ファイル側で合わせ込むのは良いやり方ではなさそうなので教えて頂いた方法を使わせて頂きます

大文字と小文字で挙動が変わるのは想像していませんでした
勉強になりました、ありがとうございます
0138デフォルトの名無しさん (アウアウウー Sac5-f5pr)
垢版 |
2021/06/03(木) 01:34:00.02ID:BJRoM0uaa
>>136
「どう取得するか?」という発想がそもそも間違ってる。
Formから知りたい情報はFormにプロパティとして公開してもらうようにする。
Formというお店の厨房にづけづけ乗り込んで今日のおすすめを
聞き出すようなコードを書いてはいけない。

それとそういう用途には普通はFormじゃなくてUserControlを使う
0139デフォルトの名無しさん (ワッチョイ 0bde-+sQd)
垢版 |
2021/06/03(木) 19:27:38.16ID:5o+Zn3rd0
質問なんですが
フォルダを監視したいのですがFileSystemWatcherクラスでCreatedイベントを漏らした時の為に
Timer1_Tickでフォルダを定期的に監視し、差分で新しいファイルをあぶり出したいのですが
これだとリネームした時も、新規ファイルだと誤爆してしまいます

こうゆうときCRCでチェックして同一ファイルだと確認するのが一般的なのでしょか?
0142デフォルトの名無しさん (ワッチョイ 2b10-6ypv)
垢版 |
2021/06/03(木) 20:42:39.32ID:tM/D16b60
FAQっぽいですけど、
pthreadの pthread_cond_* にあたる機能は.netだとどれでしょう?

Mutexは見つけたんですが…。
0145デフォルトの名無しさん (ワッチョイ 0bde-+sQd)
垢版 |
2021/06/03(木) 21:03:58.18ID:5o+Zn3rd0
>>140
れすさんくすです、ファイルのプロパティみても更新日時が変化するだけで
削除と追加のしっぽをつかまえるのはできませんでした

>>141
れすさんくすです、1個1個のファイルのCRCチェックって確かにやりたくないですね
中身比較って2つのファイル開いてバイナリで比較していくってことでしょか?
0146デフォルトの名無しさん (テテンテンテン MM4b-0MMr)
垢版 |
2021/06/03(木) 21:27:04.30ID:qi9W3pS/M
えっと、そもそも>>139の前提の
> FileSystemWatcherクラスでCreatedイベントを漏らした時
って、FileSystemWatcherってOSのファイルシステムの機能で動いてるから
少なくとも現在のWindows版の.NETなら起こらないと思ってたんだけど・・・・
本当に漏れるようなことがあるの?
FileSystemWatcherの使い方が間違ってバグってるとかじゃなくて?
0150デフォルトの名無しさん (テテンテンテン MM4b-0MMr)
垢版 |
2021/06/03(木) 23:47:49.94ID:qi9W3pS/M
>>147,148
であればバッファサイズを大きくすれば解決するんじゃ
https://docs.microsoft.com/ja-jp/dotnet/api/system.io.filesystemwatcher.internalbuffersize?view=net-5.0
と思ったら既定値は8KB、最大でも64KBなのかあ
64KBにしてもとりこぼし一杯ということであればFileSystemWatcherでの監視は実用に耐えないってことになりそうだね
0151デフォルトの名無しさん (アウアウウー Sa11-9b/0)
垢版 |
2021/06/04(金) 00:40:20.91ID:4xQVKZkva
FileSystemWatcherほとんど使ったことないけど、ドキュメントを素直に読めば
イベントのバッファを最大にすれば未処理のイベントが4096を超えない限り
オーバーフローは起こらないはず。

本当に取りこぼしなんて起るの?w
何か使い方間違ってへんか

まあ本当に起こると仮定して、ドキュメントには何も書いてないけど
FileSystemWatcherのイベントはたぶん常に同じスレッドからraiseされてるはずで、
であればイベントハンドラでちんたら重い処理をやると当然FileSystemWatcherの
イベントのキューを溢れさせる原因になりうる。

だったらイベントを処理する側もキューを持って、FileSystemWatcherのCreatedイベントハンドラでは
そのキューにFileSystemEventArgsをぶち込んだらすぐに抜けるようにしたら結構改善するんじゃないだろうか?

いや知らんけど
0152デフォルトの名無しさん (ワッチョイ 2dad-tQYP)
垢版 |
2021/06/04(金) 08:37:09.09ID:6Sv89xIa0
俺は割と使うけど、あんまりとりこぼした事は無いな。
まあ確かに、その通りで割り込みだと思ってイベントハンドラで上がってきたら即キューに入れてた。
0153デフォルトの名無しさん (ワッチョイ a142-IO17)
垢版 |
2021/06/04(金) 09:18:56.44ID:qGu+M2wT0
UWPのStorageLibraryChangeTrackerてのが凄いんだけどね
通常の監視どころかアプリが止まっている間の変化も記録して
アプリの起動時に通知してもらえる

但し音楽やビデオ、画像のライブラリ限定だから使えるアプリはそれほど多くない
帯に短し襷に長しだわ
0154デフォルトの名無しさん (ワッチョイ 36de-a12q)
垢版 |
2021/06/04(金) 10:57:48.59ID:o1VgqeFH0
>>150
さんくすね、バッファサイズを大きくしても根本的な解決にはならないとどこかで見て
やってませんでした、一度MAXまで上げて実験してみます
>>151
レスさんくす、FileSystemWatcherのイベント→PathをListBoxに→Timer1_Tickで処理
みたいにしてます、ファイルサイズ見て比較程度の処理しかしてないから多分重くは、
>>152
なるほど自分のコーディングがまずい可能性
>>153
使い道がピンポイントですね、Windows上にリネームとかのファイル操作の履歴があれば
0155デフォルトの名無しさん (ワッチョイ 0a01-UPQK)
垢版 |
2021/06/04(金) 11:29:03.52ID:hlBLv8XD0
ファイルのタイムスタンプ使えばよくない?
リネームでLastWriteTime更新される?

同じコンテンツを2度処理したくないなら
ハッシュを記録しておいて比較すればいいけど
それはタイムスタンプでフィルタするのとは少し意味が違う
0157デフォルトの名無しさん (ワッチョイ 36de-a12q)
垢版 |
2021/06/04(金) 16:09:29.79ID:o1VgqeFH0
>>155
れすさんくすです、確かにタイムスタンプでよさそうな気がします
LastWriteTimeはリネームで更新されるので、
CreationTimeとSizeを足した値をハッシュがわりにしようかと

>>156
レスサンクスです、変更トラッカーみました
ファイルの変更を受け取ることができて、変更あったらアプリをアクティブ化できる
って結構強力な感じがしますね、やりたいことドンピシャなんですが、ちょと難しすぎます
0161デフォルトの名無しさん (アウアウウー Sa11-9b/0)
垢版 |
2021/06/04(金) 21:18:38.44ID:THKvF98Aa
あとちょっと気になったのが、SynchronizingObjectを設定してUIスレッドでイベントが起こるようにしてたら
たとえイベントハンドラが軽量であってもUIスレッドで重い処理をやってたらその間は当然イベントは
起動されずバッファーにたまってしまうはず。

まあ今時UIスレッドで重い処理を書いちゃう人がいるとは思えんけど
0162デフォルトの名無しさん (ブーイモ MM71-f+mB)
垢版 |
2021/06/05(土) 00:34:20.17ID:UFxnTq6PM
親クラスの型ならば
継承したクラスでも親メソッドが呼ばれるのが気持ち悪いです。

どういう利便性や方針があってそうなっているのでしょうか?
0164デフォルトの名無しさん (ブーイモ MM71-f+mB)
垢版 |
2021/06/05(土) 00:48:56.54ID:UFxnTq6PM
どういう思想に基づいてそうなっているのでしょうか?
Javaならこんなときでも子クラスのメソッドが呼ばれるはず。このほうがしっくりくる。
C#はvirtualとかoverrideと書かねばならぬのも記憶のコストがかかって嫌い。
0167デフォルトの名無しさん (ワッチョイ 2d8e-Wt59)
垢版 |
2021/06/05(土) 01:11:09.73ID:HEfJq5i50
>>164
単にお前が馬鹿なだけだろ
0168デフォルトの名無しさん (アウアウウー Sa11-9b/0)
垢版 |
2021/06/05(土) 01:19:41.47ID:u8ssEMona
>>162
ちょっと何言ってるのかよく分からんけど、
オーバーライドと隠蔽(new)を混同してない?

サブクラスでオーバーライドしたメソッドは、そのインスタンスがたとえスーパークラスの変数に
入っていようが無関係にサブクラスで再定義されたメソッドが呼ばれる。

「親メソッドが呼ばれ」たりしない。
それはオーバーライドじゃなくnewした時だけ
0170デフォルトの名無しさん (ワッチョイ 36de-a12q)
垢版 |
2021/06/05(土) 08:24:34.54ID:5AlvgRB30
>>161
レスサンクスね、SynchronizingObjectは設定してないです
でも、そんな感じで重くなってるかもしれません、
ファイルを管理するクラスに詰め込んでいるせいかもしれません
やることが見えてきました
0171デフォルトの名無しさん (ワッチョイ 1abd-t/gr)
垢版 |
2021/06/05(土) 17:58:38.56ID:uwZf1eg30
ListViewで選択→PictureBoxに描画したい。描画する絵は連続した折れ線で曲線はなし。ListViewに転記するのはデータNo等を表示。
PictureBoxに描画するのには座標点などが必要と思うんですが、どんなFileを作り、どんなデータを入れとくのがよろしいですか?
0173デフォルトの名無しさん (ワッチョイ 1abd-t/gr)
垢版 |
2021/06/05(土) 23:57:44.51ID:uwZf1eg30
>>172
ごめんなさい。
ListViewに描画したいファイル名などの一覧を表示しておいて、選択したそのファイルを読み込んでPictureBoxに描画したいんです。
そこで、描画する為に適したファイルや、どのように座標点など保存すればようでしょうか?
0174デフォルトの名無しさん (ワッチョイ 86f2-l3mb)
垢版 |
2021/06/06(日) 08:27:26.80ID:5U5467og0
まず固定のファイル読み込んでPictureBoxに表示するまでを作って、
それからListViewでファイル選べるように拡張してください
結局のところ、何もかもわからないんでしょうけど
0179デフォルトの名無しさん (アウアウウー Sa11-9b/0)
垢版 |
2021/06/06(日) 19:51:37.48ID:TKDfd6fka
>>173
もうちょっと読み手の立場になって質問した方がいいと思うよ。
結局何が聞きたいのかどうもよく分からない。

まとまったデータをお手軽にファイルに保存したり復元したいなら
シリアル化が第一選択。シルアル化の方法はいろいろあるのでググって自分で調べて選択してください。
0183デフォルトの名無しさん (ワッチョイ eae4-uGAl)
垢版 |
2021/06/06(日) 23:00:15.42ID:TZLMH0nq0
初めてC#を触ってみようと思っている者です。
Visual Studioインストールして、「実戦で役立つ C#プログラミングのイディオム/定石&パターン」の本に書かれているものを動かそうとしているのですが、エラーが出ます。
(ネットに書かれてるHello,World!は動かせました。)
どのようにしたら本に書かれてるものを動かすことができるか、教えて頂けませんでしょうか。
0187デフォルトの名無しさん (ワッチョイ 5573-EGuX)
垢版 |
2021/06/07(月) 02:57:54.01ID:a/6zg2G30
.net frameworkじゃなく、.net5で組んでしまってるとかじゃないか。
いままで組んできた人は問題ないが、初めてC#と.netの世界に来た人は、別だとも思わないだろうし足をすくわれるかと。
しかも2019だと、.net frameworkが結構見つけにくい。
0188デフォルトの名無しさん (ブーイモ MM39-u/gC)
垢版 |
2021/06/07(月) 05:54:54.21ID:Ye13f02sM
>>183
Hello Worldができるなら次はザ・ワールドだ。段階を追って成長していこう。
0189デフォルトの名無しさん (ワッチョイ be62-jjbk)
垢版 |
2021/06/07(月) 11:03:01.40ID:mJGxopfd0
>>185
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
0190デフォルトの名無しさん (アウアウウー Sa11-9b/0)
垢版 |
2021/06/07(月) 15:18:04.07ID:2X7qaFYwa
>>189
スレッドの趣旨は尊重するよ。
その「低レベルな質問」の低レベルとは日本語の能力や質問能力も含むの?
常識的には違うんじゃないのかな。

許容されるべきなのはあくまでプログラミングの初心者だよね
0191デフォルトの名無しさん (ワッチョイ 2d7c-9meO)
垢版 |
2021/06/07(月) 15:30:33.66ID:V1O1oOig0
環境構築すら分からない初心者ならどこが分かってないかすら分からないでしょ
だからこそ>>184を書いたわけ
酷いと思っても言葉にせず飲み込むのがこのスレのルールだし、
>>183の質問の日本語が破綻してるとも思ってないよ
0192デフォルトの名無しさん (アウアウウー Sa11-9b/0)
垢版 |
2021/06/07(月) 15:38:21.95ID:2X7qaFYwa
だから何を理解してないかを理解している必要はない。
必要なのは自分の直面している問題を他人に正確に理解してもらうこと、
少なくともそういう努力をすることだ。
>>183にはそういう努力の痕跡を感じない。

エラーが出ます
何だよそれふざけてるのか。
普通はこうじゃないか。
0193デフォルトの名無しさん (ラクッペペ MMde-+uhU)
垢版 |
2021/06/07(月) 15:39:25.40ID:8ILcpsz2M
その本を見たことがないひとはお断りの質問だからね
読んだことがあるやつならつまづきポイントも予想できるだろう
0194デフォルトの名無しさん (アウアウウー Sa11-9b/0)
垢版 |
2021/06/07(月) 15:41:56.89ID:2X7qaFYwa
家電やソフトウェアのサポートセンターに相談するのにその製品を熟知している必要はない。
だからといって、

「エラーが出てるから何とかしてよ」

これじゃサポセンのお姉さんも困っちゃうよw
0199デフォルトの名無しさん (ラクッペペ MMde-+uhU)
垢版 |
2021/06/07(月) 16:30:38.76ID:8ILcpsz2M
あまり情報を出しすぎると解決されてしまい悔しいので……
0200デフォルトの名無しさん (アークセー Sxed-p9zx)
垢版 |
2021/06/07(月) 16:31:44.36ID:vHTzOnV3x
datetimeについての質問です。
指定した日時の曜日、その月は何日まであるのかという情報を取得したいのですが、
datetimeの使い方を検索すると、現在の日時の取得するばっかりでてきてほしい情報がないです。
どうすれば、指定した日付で、曜日や日数を取得できるのでしょうか?。
0201デフォルトの名無しさん (ラクッペペ MMde-+uhU)
垢版 |
2021/06/07(月) 16:32:45.68ID:8ILcpsz2M
F1キーがオススメです!
0203デフォルトの名無しさん (ワッチョイ cae4-uikQ)
垢版 |
2021/06/07(月) 16:58:25.25ID:fIvdx7SM0
>>200
DateTimeクラスのコンストラクタ呼び出しで調べたい日を引数にして呼び出して
(簡単なのは年月日時分秒でしていするのかな)、確保したインスタンスの
DayOfWeekプロパティに指定した日時の曜日情報がDayOfWeek列挙型定数として
保存されている

月の日数はスタティックメソッドのDateTime.DaysInMonthで調べられるらしいよ
0204デフォルトの名無しさん (アウアウウー Sa11-9b/0)
垢版 |
2021/06/07(月) 17:04:08.04ID:qN7i706La
>>196
それは君のルールであってスレッドのルールでも俺のルールでもない。
だいたい偉そうに言ってる自分のやってることは何なんだよ。
お前のリプは悪いリプ
俺のリプは正義のリプだ、ってか(笑)
0208デフォルトの名無しさん (ラクッペペ MMde-+uhU)
垢版 |
2021/06/07(月) 19:12:18.38ID:8ILcpsz2M
初心者プログラマーの為のスレであって
初心者プロファイラーはお呼びでは無いッス
僅かな書き込みから真実を見つけ出す熟練プロファイラーだけが書き込めるッス
0210デフォルトの名無しさん (ワッチョイ da2d-Fu2c)
垢版 |
2021/06/07(月) 19:32:41.27ID:rS0k1tFj0
プログラム初心者が質問の仕方がなってないのはよくあることだし
質問の仕方を教えたら良いだけで、それが嫌ならスルーすべき
いちいち怒ったてたら初心者が委縮して寄り付かなくなっちゃうよ
0212デフォルトの名無しさん (ワッチョイ 868e-Wt59)
垢版 |
2021/06/07(月) 19:48:44.02ID:F/OHBSZZ0
>>210
私はプログラム初心者です
あなたは馬鹿ですか?
0213デフォルトの名無しさん (ワッチョイ 7954-llGL)
垢版 |
2021/06/07(月) 20:09:51.48ID:31gUAopA0
IEnumerableにAppendで要素を追加してからCountを参照しても0になっています。

IEnumerable<Person> PersonEnum = IEnumerable<Person>();
PersonEnum.Append(new Person());
MessageBox.Show(PersonEnum.Count().ToString()); //なぜか 0

下記のようにすれば正しい要素数を得られます。
IEnumerable<Person> PersonEnum = IEnumerable<Person>();
PersonEnum = PersonEnum.Append(new Person());
MessageBox.Show(PersonEnum.Count().ToString()); //正しい数が表示される。

これは何故でしょうか?
0222デフォルトの名無しさん (ワッチョイ 868e-Wt59)
垢版 |
2021/06/07(月) 21:55:03.58ID:F/OHBSZZ0
>>220
馬鹿過ぎて「死ね」も言えない
0223デフォルトの名無しさん (ワッチョイ 1abd-t/gr)
垢版 |
2021/06/07(月) 21:58:27.19ID:JlFJcgFr0
ComboBoxにて選択したTextによって配列?Point?の戻り値を取得したいんですが、未だ使った事のないGetSetの出番ですかね?
ComboBoxにはA.B.CなどのTextです。
配列の中身は固定値で
A [0]X=25、Y=25
 [1]X=30、Y=25
 [3]X=30、Y=50
B [0]X=125、Y=25
 [1]X=160、Y=25
 [3]X=160、Y=250
などです。数値に規則性はないです。

触りのコードでも教えて頂ければ幸いです。
0225デフォルトの名無しさん (ワッチョイ 0a01-UPQK)
垢版 |
2021/06/07(月) 22:21:08.27ID:TK3hG12A0
>>220
これはエラーメッセージが悪いかも

メソッドの中では型を宣言することはできないから
public class Productの前に閉じ括弧がないとおかしいって判断してそういうエラーを出してる
0226デフォルトの名無しさん (ワッチョイ be62-jjbk)
垢版 |
2021/06/07(月) 22:24:08.69ID:mJGxopfd0
あるリストを重複なしのグループに分けたいのですがいい方法を知りませんか?
{1,1,1,2,2,2,3,3,3}→{1,2,3}{1,2,3}{1,2,3}
{1,2,2,3,3,3,4,4,4,4}→{1,2,3,4}{2,3,4}{3,4}{4}

例は数字だけど本来はクラスで、各グループのインスタンスは別々のものにしたい
1(1組山田)、1(1組山本)、1(1組山下)
0227デフォルトの名無しさん (ワッチョイ 0ae4-uGAl)
垢版 |
2021/06/07(月) 22:35:41.93ID:5OLokVZ40
>>225
ありがとうございます。
最初のVisualStudioを立ち上げた画面で色々選択できますが、そこで選んでいるものが間違っておりますか?
それとも、コードを改善すれば直るのであれば、どのように記述すればよいか教えて頂けますと大変助かります。
0229デフォルトの名無しさん (ワッチョイ 4a3b-szig)
垢版 |
2021/06/07(月) 23:10:06.82ID:wG/D+QQo0
>>227
答えが書いてあるだろ
お前みたいなバカは何をさせてもダメだ
0238デフォルトの名無しさん (ワントンキン MM5a-Srd6)
垢版 |
2021/06/07(月) 23:46:04.25ID:TRkLBERBM
確かに丸写しすらできずに人に丸投げするような人は頭の病気だよね
0241デフォルトの名無しさん (アウアウウー Sa11-9b/0)
垢版 |
2021/06/08(火) 00:07:22.40ID:C+l/FTdha
>>223
この人もさあ、なんでもうちょっと他人に自分の問題を理解してもらう努力をしないの。
率直に言って何を言ってるのかさっぱり分からん。

別に罵倒したくて言ってるわけじゃなくて、どんなに善意の人でも
理解できない問題には答えようがないと思うよ
0243デフォルトの名無しさん (ワッチョイ 6933-cd7n)
垢版 |
2021/06/08(火) 01:47:59.42ID:ib/yEAMa0
あんまりいぢめてやるなよw
ミミズだって オケラだって 220だって
みんな みんな生きているんだ 友だちなんだ
トンボだって カエルだって 223だって
みんな みんな生きているんだ 友だちなんだ
0246デフォルトの名無しさん (スプッッ Sdea-cnok)
垢版 |
2021/06/08(火) 07:55:04.09ID:oPwax1u6d
>>224
選択した時に処理したいです。
0249デフォルトの名無しさん (スフッ Sdea-PR6M)
垢版 |
2021/06/08(火) 12:52:13.99ID:T+eZSKNrd
あんぱん買ってくるのでゴミみたいな質問をさせてください…

標準入力で
整数n
n文字の文字列

を取得して、n文字の文字列を1字ずつ縦に出力したい場合は何をどうすれば良いのでしょうか
検索する為のキーワードだけでもご教示いただければ嬉しい限りです…
0250デフォルトの名無しさん (ラクッペペ MMde-+uhU)
垢版 |
2021/06/08(火) 13:01:29.32ID:iJBocUpIM
どこに出力するのですか?
0253デフォルトの名無しさん (ワッチョイ ea4b-Alfg)
垢版 |
2021/06/08(火) 14:26:06.75ID:eKo67trX0
バイト配列と、構造体の相互変換ですが、Marshal を使った方法
Marshal.PtrToStructure / Marshal.StructureToPtr ではリトルエンディアンしか対応していません。
ラージエンディアンとBCDに対応した相互変換のライブラリ等はありませんでしょうか。
.NET5 を想定しています。
0255デフォルトの名無しさん (テテンテンテン MMde-1bbd)
垢版 |
2021/06/08(火) 15:07:20.57ID:bn01gd5kM
>>253
ないから自作するしかなかったような記憶が
ちょっと漁った限りでは
https://github.com/davidrea-MS/BitConverter/tree/master/EndianBitConverter
 → https://www.nuget.org/packages/EndianBitConverter/
https://github.com/jfoshee/UnpluggedIbmBits
なんてのはあるみたいだけど、この位なら自前で書いてもさほど手間は変わらないような
0257デフォルトの名無しさん (ワッチョイ 5d33-VNmt)
垢版 |
2021/06/08(火) 18:22:07.24ID:+zfftH1n0
>>249
たぶん、プログラムの基本である、逐次実行を理解して無いんじゃなかろうか

上から処理するし、順に出力されるのが基本
縦に出力させたいなら、上から順に出力する方法が基本

一気に表示させる事は出来るが、結局内部で上から溜めて一気に吐き出してるだけ
0258デフォルトの名無しさん (ワッチョイ 0ae6-+uhU)
垢版 |
2021/06/08(火) 18:33:56.39ID:/pGHNa0l0
逐次処理なんて時代遅れ!!
LINQとかで一撃でズバーっと解決しちゃうのがナウいッスよ
0264デフォルトの名無しさん (ワンミングク MM1d-Srd6)
垢版 |
2021/06/09(水) 03:51:36.11ID:D8wcA5EVM
>>260
>>261
で?またお前が間違えていたのか、それとも本が間違えていたのかそれくらい書けよ
だからバカだっての
0273デフォルトの名無しさん (ブーイモ MM2e-V3Ia)
垢版 |
2021/06/09(水) 12:29:29.59ID:paDfdrYmM
>>270
doubleやdecimalで収まる程度の桁数なんだったらそれらに変換してから計算すりゃいい
収まらないんなら必要な精度を決めて予めfloatの方を10^n倍して整数化した上でBigIntegerに入れて乗算するとか
0275デフォルトの名無しさん (アウアウウー Sa11-9b/0)
垢版 |
2021/06/09(水) 12:54:22.23ID:RdncRzI4a
>>270
(1) 与えられるBigIntegerの値の範囲
(2) 演算結果として欲しい型と精度

まずこういう要件を定義しないと何とも言えないのでは?
こまけーことはいいんだよならdoubleにキャストして演算するだけだろうけど
0276デフォルトの名無しさん (ワッチョイ 1abd-t/gr)
垢版 |
2021/06/09(水) 22:22:16.62ID:yp9eglBe0
form1にTabControlとボタン2つ配置。
ボタンはnextボタンとreturnボタンとしてボタンのclickに応じてtabpageを切り替える処理がしたいです。
※処理※
起動時tabpageは最初のページ。nextで次ペ頁、 returnボタンで1つ前の頁。
最終ページでnextなら最初の頁。最初頁でreturnならformを閉じる。

それぞれのボタンのイベントに処理はネットみて書けたんですが、うまいこと一つにまとめる方法が知りたいです。
0281デフォルトの名無しさん (ワッチョイ ea4b-hvqo)
垢版 |
2021/06/10(木) 11:33:53.07ID:rur9wo/n0
class c {
public byte[] arr;
}

foo = new c(){
arr = new byte[10];
}

var ff = foo.GetType().GetFields(
BindingFlags.Instance |
BindingFlags.Static |
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.GetField
);

var f = ff[0];
var v = f.GetValue(foo);

この時 v は byte[] になりますが、v[0] にアクセスしたい場合はどうコーディングするのでしょうか。
そのままv[0]とすると、object型に[]を付けられないとエラー表示されます。

var zz=(byte[])v;
var z = zz[0];

とすればアクセスできる事は確認していますが、byte 部分が不明でもアクセスできるようにしたいのです。
0284デフォルトの名無しさん (ワッチョイ d95f-PRuz)
垢版 |
2021/06/10(木) 22:54:11.27ID:ZEfq1fzk0
ちょっととりとめのない質問なんですけど
社長が取ってきた仕事でどっかの会社が作ったC#アプリをうちの会社で修正するという仕事の担当になりました

んで中を調べてたら
edmxって言う拡張子があって
それがEntityFrameworkと言うことがわかったのです

データベースももらってきてビルドしたら通るように放ったのですけど
edmx内にあるcsファイル?(ッポイやつ)を開こうとしたらビルドエラーになってデザイナーが表示されなかったり
なんだか訳がわからなくて・・・

EntityFrameworkを猫でもわかるように解説してるところってないですか?
0288デフォルトの名無しさん (ワッチョイ bfbd-hyWT)
垢版 |
2021/06/11(金) 00:58:16.80ID:kVdsE3UJ0
public class PropertyCls {
public int PropertyInt{ set; get;}
}

class Program {
static void Main() {
PropertyCls p = new PropertyCls();
p.PropertyInt = 32;
Console.WriteLine(p.PropertyInt);
}
}

GetSetの壁にぶち当たってます。調べてもこんなコード等しか出てないし使い所が分かりません。
Mainの中にint p=32で終わりじゃんとか思えないんですが...
ひとつじゃ使わないけど、PropertyIntの他にもNameとかAgeとか複数の構造体?風な事が変数風?に出来るよって感覚ですか?
社員番号とかの例とかよく見ますが、他によく使うパターンとか教えて下さい。
0289284 (ワッチョイ 335f-t88l)
垢版 |
2021/06/11(金) 01:06:01.10ID:qvzRqpry0
xmlファイルと言っても開いてどうなるのでしょうか・・・

とりあえずドキュメントは取説だけあって
doxygenでクラス関連図とか抜き出してみたけどコメントないし名前の付け方も訳がわからないので動かしながら見るしか無いという地獄・・
Totigiとかそんな感じのクラスがあって・・・
0293デフォルトの名無しさん (スップ Sd1f-ewEI)
垢版 |
2021/06/11(金) 09:38:54.03ID:Pc6dU7Wud
get setは構造化の基本
データの塊はこーゆー設計がいいよねって話

データの塊なので、利用、登録は意識しない
(なるべく他に依存しない)

ただ、オブジェクト指向だからって、車のネジ一本から作るのは間違い
そのアプリが目的としている形のオブジェクトでいい
トラックなのか乗用車なのか、とか、車なのか電車なのか
0295デフォルトの名無しさん (スップ Sd1f-ewEI)
垢版 |
2021/06/11(金) 10:48:58.40ID:Pc6dU7Wud
すまんね。
ただ「プログラムの構造・設計」って意味で言ったので間違ってないよ
(俺自身は隠蔽する意味を見出していない、日本語訳が間違ってるだけ?)

ちなみに、質問者のプログラムだと、登録と利用が同時に行われてるので、get setの意味は全く無い
意味ないと思うのは当然
0298デフォルトの名無しさん (アウアウクー MM87-IdmB)
垢版 |
2021/06/11(金) 12:57:23.03ID:/Ldzrd4UM
>>288
社員番号、入社年度、年齢、性別とか沢山の項目があるなら構造化する
ひとつならたいして意味ない。ただし項目によってはValueObjectにしたほうがいいかもしれない。

で、入社年度から在籍年数をクラス内で計算してgetできるようにするとか。そういったロジックをクラスに用意する。

ただこういうクラスの場合はsetを使うより
コンストラクタで渡すほうがよい。
で、get; private set;
にする
0300デフォルトの名無しさん (スップ Sd1f-ewEI)
垢版 |
2021/06/11(金) 14:47:45.55ID:Pc6dU7Wud
わかったよ
入門者はget setに注目してるから、訳がわからなくなるんだな

大事な方は、データの塊の持ち方であって、取り方入れ方は副産物

本来はgetって書いてあるから取ってるんだねって一発でわかる様になってたが、今は書かない様になったから、getメソッドのメリットが薄くなってる
0303デフォルトの名無しさん (アウアウウー Sa67-gVNt)
垢版 |
2021/06/11(金) 16:12:18.68ID:OoWb95ZEa
>>302
恐らくその通りだと思うけど、聞いてる方も答えてる方も
コミュニケーション能力が低すぎてなんか滑稽なことになってるねw

そして、これが肝心だけど、そういうことなら普通
こんなところで質問する前に「プロパティ フールド 使い分け」
とかで検索する。

getsetの壁とか訳わからんこと言ってることから分かるように、
この質問者さんは普通の人がまずやることを何もやってない。
0305デフォルトの名無しさん (スップ Sd1f-ewEI)
垢版 |
2021/06/11(金) 18:06:02.90ID:snOiqcmLd
俺がコミュ症とはひどいなぁ(文才が無いだけ)
人生口先だけで生きてきたよ
それは置いといて

質問者は「Mainの中にint p=32」と言ってる時点で、データ外出しに気づいてないなと思ったよ
0306デフォルトの名無しさん (ワッチョイ 63da-0JFK)
垢版 |
2021/06/11(金) 19:22:00.59ID:+sJHqm0v0
>>288
この例ではpを表示してるのは確認の為で主目的ではないね

プロパティはクラスのフィールドみたいな物
フィールドはクラスの変数で、寿命はクラスを作ってから破棄まで
例えば、個人情報のクラスなら住所や電話番号がフィールド

いくつかの理由でフィールドに直接アクセスするのは良くないとされている
つまり
✕personal.phone=09012345678とかnum=personal.phone
○personal.SetPhone(09012345678)やnum=personal.GetPhone()

でも下の表記はクラス側にSetxxx/Getxxxを書かなくてはならず詰まらないコード量が増える

そこでC#は呼出側は上の記述が使え、クラス内では最低限のコード量で書くプロパティが考案された
0307デフォルトの名無しさん (スププ Sd1f-+vzQ)
垢版 |
2021/06/11(金) 19:52:45.88ID:95OnglC4d
以前は{ get; set; }って記述は出来なかったよね。
必ずprivateの保存先に読み書きしたり、なんかロジックとか固定値で値を返したり。
さらにラムダ式とか多様な定義が出来るようになったから、着いていけない人も居るのかも。
自分も自信ない。無駄な書き方してないだろうかと。
0308デフォルトの名無しさん (ワッチョイ 632f-JlJp)
垢版 |
2021/06/11(金) 20:13:06.43ID:rguC8k2o0
ここは
>「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」
だからな

>>288は、まずプロパティという概念を理解できているのか?
そしてそれがC#ではどのように実装されるのかを理解できているのか?
(今のC#のプロパティにはいろんな書き方ができるのでわかりにくい)

その上でフィールドとの使い分けなら
クラスの外部に公開するものはプロパティにする
単純に値を格納するだけのもの以外はプロパティにする
が基本方針だと思えばいい
0309デフォルトの名無しさん (ワッチョイ 73b0-t88l)
垢版 |
2021/06/11(金) 20:37:00.28ID:fG/j16u90
アルゴリズム云々じゃなくてとりあえずコーディングの練習したいときの手軽な問題って何があるかな?

今は競技プログラミングの簡単な問題を最近の記法使いつつ解いてるのだが他に何かあれば知りたいです
0313デフォルトの名無しさん (ワッチョイ ff05-W6T4)
垢版 |
2021/06/14(月) 20:09:02.57ID:BmiJqBp+0
株価チャートは作れますか?
0321デフォルトの名無しさん (ワッチョイ bfbd-gv+s)
垢版 |
2021/06/15(火) 23:06:30.86ID:vcMBupBl0
<ブックリスト>
<アイテム id="11">
<タイトル>XML</タイトル>
<筆者>鈴木</筆者>
<カテゴリ>1</カテゴリ>
</アイテム>
<アイテム id="22">
<タイトル>WORD</タイトル>
<筆者>田中</筆者>
<カテゴリ>2</カテゴリ>
</アイテム>
</ブックリスト>
こんなxmlをID指定で読みたい。ID 22ならば、WORD、田中、2が得られるように。

調べると下のようなものが出てきました。指定で読み込みたいのでforeachでなく読んだ結果を直に欲しいです。(foreachの中身のような)
IEnumerable<XElement> infos = from item in xml.Elements("??") select item;
foreach (XElement info in infos){
info.Element("タイトル")
info.Element("カテゴリ)
}

指定で読むにはどうしたら良いですか?
0322デフォルトの名無しさん (ワッチョイ cf63-ncc4)
垢版 |
2021/06/16(水) 00:27:44.40ID:/wNWjCZd0
findByIdはないです
なんで無いのかは知らないです
実用性を無視した意味不明なこだわりを持ってるライブラリ設計者っていますけど、たぶんその類だと思いますね
別の言語ですがElementTreeの設計に関しても似たような後継を見ましたね
XMLは変な設計者を引きつけるのかも知れない
0323デフォルトの名無しさん (ワッチョイ ffe6-U+vn)
垢版 |
2021/06/16(水) 00:34:43.94ID:5mM/xZpb0
XPathで一発じゃんか
Linqはコレクション向けの機能だからな
0325デフォルトの名無しさん (アウウィフ FF67-U3V2)
垢版 |
2021/06/16(水) 17:36:15.53ID:uJQ6HHCXF
>>321
bs = BeautifulSoup(xml, features='lxml')
for item in bs.find(id='22'):
if type(item) != bs4.element.NavigableString:
print(item.text)
0327デフォルトの名無しさん (ワッチョイ 232c-W6T4)
垢版 |
2021/06/16(水) 21:45:08.91ID:6jJilgqa0
Ruby, Nokogiri では、XML もHTML のように使える。
CSS セレクターも使える

require 'nokogiri'

doc = Nokogiri::XML(<<EOT)
<root><books>
<book id="1">
<title>one</title>
</book>
<book id="2">
<title>two</title>
</book>
</books></root>
EOT

element = doc.at_css( "#2" )
puts element.at( "title" ).content #=> two
0328デフォルトの名無しさん (ワッチョイ 8f67-MHI0)
垢版 |
2021/06/16(水) 23:24:04.21ID:nxmBk19h0
初心者だけどVBAのノリでgosub return使おうとしてコンパイラにエラー出されて悩んだ
goto使えるんならこっちも使えてもいいじゃん
0331デフォルトの名無しさん (ワッチョイ 0389-9wAC)
垢版 |
2021/06/17(木) 03:03:58.98ID:ZAUwj7CW0
質問失礼いたします。
0.5秒間隔に、3回連続で2枚の画像を交互に表示させたいのですが、2つ目の画像しか表示されません。
開発環境はVisual Basic Studio、言語はC#です。
プログラムは下記の通りです。
どうぞよろしくお願いいたします。

private void button1_Click(object sender, EventArgs e)
{

Timer timer = new Timer();
timer.Interval = 500;
timer.Start();

int count = 0;

pictureBox1.ImageLocation = @"ファイル名";

pictureBox1.ImageLocation = @"ファイル名";

if (count < 3)
{
count++;
}

else
{
MessageBox.Show("終了");
timer.Stop();
}
0332デフォルトの名無しさん (ワッチョイ 6f62-Lkk5)
垢版 |
2021/06/17(木) 05:52:30.68ID:8FKshyx30
>>331
何が悪いとかのレベルじゃない
特定の行でF9でブレークポイントが設定できデバッグ実行を止めることができる
その後F10で一行ずつデバッグ実行を進めることができるから想定している動きになってるか確認することから始めた方がいい
0334デフォルトの名無しさん (アウアウウー Sa67-tjD1)
垢版 |
2021/06/17(木) 15:21:46.42ID:WS39elSMa
>>331
private bool mIsBusy = false;
private async void StartSlideShow()
{
  if (mIsBusy) return;
  mIsBusy = true;
  var dir = @"C:\Windows\Web\Wallpaper\Theme2";
  var names = new[] { "img7.jpg", "img8.jpg", "img7.jpg", "img8.jpg", "img7.jpg", "img8.jpg" };
  foreach (var name in names)
  {
    var path = System.IO.Path.Combine(dir, name);
    pictureBox1.ImageLocation = path;
    await Task.Delay(500);
  }
  mIsBusy = false;
}
0337デフォルトの名無しさん (ワッチョイ a3e4-FyPE)
垢版 |
2021/06/17(木) 16:59:01.31ID:ooZzmu2N0
>>331
>>334ががっつり趣旨に沿ったコード書いてくれちゃってるので解決かもしれないけど
>>331のコードだと2つ目だけ表示されるのは正しい動作だぞ
コードとしてはボタンが押されたらタイマー設定のみ行って画像1を表示
待ち時間なく画像2を表示(同じものに上書きしているので結果として画像2だけ表示)
countは常にメソッドの中で初期化されるので永遠に終了ダイアログは表示されないし
timerも止まらない
イベントメソッドも存在しないのでTimerクラスを使った意味がない
っとプログラムとして成立していないよ
0342デフォルトの名無しさん (ブーイモ MM67-YCR2)
垢版 |
2021/06/18(金) 13:08:32.73ID:ApjvrmIoM
VisualStudioスレで質問しましたが回答を得られなかったのでこちらに投げ直します、よろしくお願いします

c#でWindowsFormのForm1(大きさ以外全てデフォルト)に
richTextbox(大きさ以外全てデフォルト)のコントロールを張り付けて以下のコードを実行

static void Main()
{
Application.Run(new Form1());
}

表示されたrichTextboxにイメージをペーストすると強制的に縮小されてしましまいます、richTextboxのサイズに依存せずすべて同じ大きさになります

どうして等倍で表示されないかの理由と等倍にする方法、又は倍率指定をする方法はありますか?

※キャプチャ画面 http://up-img.net/img.php?mode=jpg&;id=22425

参考1:vb.netでも同じ現象が起きます
参考2:クリップボードのイメージを縮小してからペーストしたところ画像は小さくなるのですが拡大してからペーストをしても同じ大きさのままで一定の大きさを超えることはありませんでした
参考3:イメージのハンドルをマウスカーソルでつかんで大きさを変えることは可能です
0343デフォルトの名無しさん (ワッチョイ 9a01-VB6v)
垢版 |
2021/06/18(金) 15:11:40.58ID:BPwODCTr0
テトリス作ってるんだけどおもしれー
もしググったら洗練されたコード出てきちゃってつまんなくなるから一切調べない方向で行く
オブジェクト指向って何ですか?っていうとんでもなく酷いコードなんだけど、とりあえず力尽くで作ってみる
0346デフォルトの名無しさん (ラクッペペ MMb6-tFUR)
垢版 |
2021/06/18(金) 16:37:12.93ID:tae+NGJOM
wpfのdatagridでmvvmでテトリス
0347デフォルトの名無しさん (アウアウウー Sa47-FswZ)
垢版 |
2021/06/18(金) 17:29:10.97ID:2oHMGf83a
>>342
再現できんなあ。

コピー元アプリの方で縮小してるんじゃないの?
その問題のクリップボードの画像は、他のアプリ、例えばペイントにペーストした時には
ちゃんと原寸大でペーストされる?

画像サイズがデカい時、ワードパッドだと横幅に合わせて縮小されるけど、
RichTextBoxにそんな気の利いた機能が実装されてるとも思えんけど
0350デフォルトの名無しさん (ブーイモ MM26-YCR2)
垢版 |
2021/06/18(金) 21:14:08.05ID:sIt6goKIM
>>349
色々試してみたところ画像ファイル(jpg)を直接ドラッグしたりコピペした場合には画像が小さくなって、ペイントに一度貼り付けたものをコピペした時は等倍になるようです
つまりクリップボードの中身がファイル名だとなぜか縮小されて、イメージファイルだと正しくコピーされるようです、理由は解らないですがちゃんとイメージをコピーしていない自分のミスでした、すみません
ありがとうございます
0351デフォルトの名無しさん (ワッチョイ f6da-Y04N)
垢版 |
2021/06/18(金) 21:18:17.98ID:CeuVWc4D0
マカーが作った画像じゃないの?DPIが72になってるやつ。
Windows標準は96dpiだから、同じ300ピクセルの画像でもdpi情報が72か96かで変な挙動した記憶がある。
テストに使ってる画像を右クリックして詳細タブの「水平/垂直方向の解像度」の値みてみ。

それとテスト画像を96dpiで作られてるもので試してみるとか
0353デフォルトの名無しさん (ブーイモ MM26-YCR2)
垢版 |
2021/06/19(土) 00:22:28.91ID:6GSPTGzeM
>>351
私もそう思って色々なDPIのファイルを試したのですけど全て同じ挙動なんですよね、大体は96か300あたりでした
逆に72は今のところはないようです

とりあえずPictureBoxに画像を読み込めば等倍でいけるのでそれで代用するしかないかなと考えています
0354デフォルトの名無しさん (ワッチョイ a702-H/9o)
垢版 |
2021/06/19(土) 11:19:41.98ID:aMtkyk0f0
再現はしたけど、解決方法は分からないなあ。
間接的な方法ではこんなのがあるかも。
1) RichTextBox の中に PictureBox を貼り付ける
2) コピー元によっては期待通りになるなら、一度別のコントロールに貼り付けた後にそこからコピペしてみる

RichTextBox.Rtf プロパティをどうにかするって投稿もあったけど、自分にはどうにもならなかった。
0355デフォルトの名無しさん (アウアウウー Sa47-FswZ)
垢版 |
2021/06/19(土) 13:34:06.66ID:Dd96s04da
だから最初から言ってるけど、コピペにしろD&Dにしろ、まずソース側を疑うのが普通でしょ。
何でそれをやらないのか不思議でしょうがない。

ソース側がサムネイルを提供してるならサムネイルが表示されるのが正常な動作で受け取る側では
どうしようもない。

少なくともデータがビットマップなら勝手に縮小するような仕様になってないのは確かだ。
0359デフォルトの名無しさん (アウアウウー Sa47-FswZ)
垢版 |
2021/06/19(土) 17:09:46.83ID:Dd96s04da
>>342の人がソース側(コピー元)に使っているアプリがそうなっているか分からないが、
コピーやドラッグ操作が行われた時、デスティネーション側に提供するデータが

(1) 元画像のファイル名
(2) その画像のサムネイル

この2つを含む時、ペーストまたはドロップされる側のアプリがどちらを優先的に受け取るかによって
何が表示されるかは異なってくる。

>>350に書かれているような現象が起こるとしたらこういう理由でしょうね。
0361デフォルトの名無しさん (ブーイモ MMff-YCR2)
垢版 |
2021/06/19(土) 23:50:18.43ID:c/Gc9inqM
>>359
ありがとうございます、350です、確かにクリップボードをみてみると同じjpgファイルでも
ペイントに表示させてからコピーしたものはイメージの形式がCF_DIBになっていて
エクスプローラからコピーしたものはCF_HDROPになっていました
予想ではrichTextboxはこのデータの形式によって挙動(優先順位もそうですが)が違うようで
CF_DIB(BITMAP)形式のデータを渡してあげないと等倍にはしてくれないようです

ここまでは教えて頂いて解ったのですがじゃあどうするかというとかなり難しいようで
スキル的にさっぱり解らないので今回は何か他の方法を検討してみようと思います
※ちなみにPictureBoxに表示させてからコピペしてもダメでした
0363デフォルトの名無しさん (ブーイモ MMff-YCR2)
垢版 |
2021/06/20(日) 08:47:45.77ID:j7B8ObuHM
>>362
解る限りですが……
VS:Version 16.7.2 win10 4K
ブラウザ:Chronme
手順は基本 >>342のとおりです、それ以外は特にいじっていないです
あとは下記2点で試しています
元ファイルはネットにある画像ファイル(不特定多数でなんでも)で
縮小は横幅が376(目読み 笑)ピクセル以上あればどれでも起こるようです
※PictureBox1.SizeMode = PictureBoxSizeMode.Zoom;と同じ挙動です

クリップボード内容はこれで確認しました
https://www.officedaytime.com/clipmm/

参考にしたのはここらへんです
https://www.atmarkit.co.jp/ait/articles/0012/19/news005.html
https://johobase.com/clipboard-get-set-csharp/
http://blog.esora.xyz/clipboard-auto-convert
https://docs.microsoft.com/en-us/windows/win32/dataxchg/standard-clipboard-formats
https://dobon.net/vb/dotnet/system/clipboardformats.html

もちろんエクスプローラーからコピペしたものはファイル名も入っているのですが
前回その部分は割愛させていただきました
0365デフォルトの名無しさん (ワッチョイ b32f-C2Ex)
垢版 |
2021/06/20(日) 13:09:02.38ID:ly1l4Yun0
RichTextBoxのEnableAutoDragDropはデフォルトfalseだから、そもそもドロップできないってのはおいといて

エクスプローラからRichTextBoxに(JPEG)ファイルをドロップやペーストしても
ファイル名が表示されるだけで、そこに画像が表示されたりしないだろって言ってるんだが

俺の環境だけか?
0366デフォルトの名無しさん (ワッチョイ 9b0a-mD0S)
垢版 |
2021/06/21(月) 17:49:14.81ID:653L3PyX0
AppendAllTextとアクセス権についてお詳しい方いらっしゃいましたら教えてください。

今、とあるテキストファイルに対しデータを追加するコードを書いています。そのファイルのアクセス権は少し特殊で、上書き保存は許可せず、データの追加のみ許可しようと考えています。

OSはWin10ですので、ファイルのセキュリティの詳細設定から、データの書き込み許可のチェックは外し、データの追加の許可はチェックしてある状態です。
その状態でファイルに対しAppendAllTextを実行すると、ファイルのアクセスが拒否されたとのエラーが発生してしまいます。
StreamWriterやFileStreamを使ってデータの追加を試みても同様の結果でした。
実行アカウントが正しいことはWindowsIdentityから確認済みで、操作対象のファイルに対しデータの追加権限があることもSecurityManagerのIsGrantedで確認しました。
また、データの書き込みを許可するとエラーは出なくなります。

以上の現象は仕様なのでしょうか?
データの書き込みを許可せずにファイルにデータを追加する良い方法は無いでしょうか?
長文になり申し訳ありませんが、教え頂けると幸いです。
0368デフォルトの名無しさん (ワッチョイ 9b0a-mD0S)
垢版 |
2021/06/21(月) 19:09:48.17ID:653L3PyX0
>>367
許可は与えているのでできないのはC#側の仕様かと思い込んでいましたが、先程Pythonで同様の処理をしようとしても同じくエラーでした。
アクセス権はあるはずなのにできない理由が不可解ですが、C#固有の問題では無さそうなのでスレ違いでした。
お騒がせしました、ありがとうございました。
0369デフォルトの名無しさん (テテンテンテン MMb6-8ohN)
垢版 |
2021/06/21(月) 19:44:00.59ID:ZPtJaOSgM
試さずに書いちゃうけど、
>>366のはFileStreamのコンストラクタでfileModeに「FileMode.Append」を明示的に指定した場合に限っては
エラーにならず意図したとおりに追記書き込みが出来そうな気がする

File.AppendAllTextのソースを軽く見た限りは
https://referencesource.microsoft.com/#mscorlib/system/io/file.cs,d673bcd88b09d5b8

https://referencesource.microsoft.com/#mscorlib/system/io/file.cs,4ff1446b33bdfb6b
って感じで細かいパラメータを指定せずStreamWriterを開いてるから
暗黙のうちにFileMode.Open(=追記に限らない汎用的な書き込み要求)でファイルを開こうとして
エラーになってるんだと思う
0370デフォルトの名無しさん (アウアウウー Sa47-FswZ)
垢版 |
2021/06/21(月) 19:57:20.17ID:/frx3MW9a
cmdで
echo AAA >> hoge.txt
とかやってもダメだねw

そもそも「書込み不可」なのに「追記可能」というのは矛盾しているようにしか聞こえない。
ググって↓の記事とか読んでみたがどうも判然としないね
https://milestone-of-se.nesuke.com/sv-basic/windows-basic/kind-of-permission/

逆に「書込み可能」と「追記不可」という組み合わせに意味があるってことなんだろうか?
0373デフォルトの名無しさん (ワッチョイ 9b0a-mD0S)
垢版 |
2021/06/21(月) 20:26:07.89ID:653L3PyX0
皆様ありがとうございます。
長くなりすぎて書くのを省いてしまったのですが、FileMode.Appendと明示しても駄目でした。
書き込みは既存の内容を変更するための権限と思っていたので追記は単独で機能すると考えたのですが、追記するにも書き込み権限が必要になるようですね…
0375デフォルトの名無しさん (テテンテンテン MMb6-8ohN)
垢版 |
2021/06/21(月) 20:32:49.87ID:R1Q9shF9M
えースレチなの?
C#で書くソースでもNETFrameworkAPIの仕様についての話になるようなテーマはこのスレで書いちゃだめなのかあ
こんなんで教えたがりマン呼ばわりされちゃうのかあ
0377デフォルトの名無しさん (アウアウウー Sa47-FswZ)
垢版 |
2021/06/21(月) 20:47:40.52ID:4MUa/1sNa
また下劣な交通整理マンが威張ってるのかw
ほんとバカだよなこいつ
0378デフォルトの名無しさん (アウアウウー Sa47-FswZ)
垢版 |
2021/06/21(月) 20:52:11.09ID:4MUa/1sNa
このバカの論理を厳密に適用したらこのスレの大半の質問はスレ違いになる。
そもそも>>366みたいな質問で誰が困るのかね。
だーれも困りゃしねーよバーカ。
単にお前が他人にケチを付けたいって卑しい動機で言ってるだけだろ馬鹿臭い。
0381デフォルトの名無しさん (ワッチョイ 0e68-l7Tt)
垢版 |
2021/06/22(火) 19:04:26.06ID:MwXlKMk/0
諸先輩の方々にご教授願いたい事があり、質問させていただきました。

皆さん、アプリを作成する際のアイコンはどこで仕入れてらっしゃいますでしょうか?

ツールバーのアイコンのセットを購入したいのですが、どこで皆さん買われてますか?

教えてください🙇🏻
0384デフォルトの名無しさん (ワッチョイ 8754-LgoA)
垢版 |
2021/06/23(水) 02:14:59.51ID:7ER6/IiD0
例外処理をどうするべきか教えて下さい。

処理の流れは以下です。
@DBサーバーに接続
Aサーバーにクエリを投げてデータ取得
A取得したデータをFormのDataGridViewに反映

この場合、通信不調が原因で例外が発生しそうな場所は、
@接続タイムアウト
Aクエリ送信後に通信不調が発生しデータ取得不可
Bデータが取得できなかった場合にNullReferenceException
だと思っているのですが、どこでtry catch処理してユーザーに通知するべきなのでしょうか?
0387デフォルトの名無しさん (テテンテンテン MMb6-bi/t)
垢版 |
2021/06/23(水) 09:16:09.79ID:F5LywJDKM
>>384
NullReferenceExceptionが出るのはバグと見做すのが普通であり、明示的にnullチェックして例外を発生させないようにすべき
そもそも例外は個別に処理しないのが基本であり、ユーザーへの通知なんか最終的にはApplication.ThreadExceptionイベントでやればよい
その上でメッセージを出し分けたいとかリトライしたいとか個別の事由がある場合には処理に適した場所でキャッチして処理する
個別にメッセージ出したいならクリックのイベントハンドラなどUIの一番大元で処理するのが適切だろうな
0388デフォルトの名無しさん (アウアウウー Sa47-FswZ)
垢版 |
2021/06/23(水) 12:59:00.83ID:tnu5qnzMa
>>384
なんか抽象的過ぎて結局何が聞きたいのかよくわからない気が。

tryブロックをどこに書くべきかって話ならもちろん普通は発生個所に書く。っていうか、
通信が絡むならリトライする関係で必然的にそうなるよね?その上で必要ならそのまま再スローするか
ラップしてスローする。

リトライなんかしなくてもtryブロックはいちいち発生個所に書かないとダメ。なぜならどこで例外が
起こりうるかなんてだいたい理解しているのはそのコードを集中して書いてる時だけですぐに忘れるから

エラーメッセージの表示は誰の仕事かという意味ならそれはもちろんUIの仕事で疑問の余地はない。

あと間違ってるかもしれないが、↓の記事にあるような集約的に例外をトラップする機能は
プログラマが想定してない例外の発生(要するにバグ)を想定して使うものであって
手抜きのために使うものではないと思う。
https://www.atmarkit.co.jp/ait/articles/1512/16/news026.html
0389デフォルトの名無しさん (ワッチョイ 4ea7-Z1/y)
垢版 |
2021/06/23(水) 22:27:53.29ID:oXoNjVOZ0
終了処理がないなら例外は一番外側でcatchすればいいかな?
一番外側ってのはformでいうclickメソッドみたいなのね

終了処理が必要なとき
つまりDBの更新処理なんかに失敗したとき例外でぶっ飛ばしちゃうと
Rollbackができないのでcatchが必要

よくやる間違った組み方で
例外=エラーとして組んじゃうと
上記のようなときにエラーをうまく伝搬することができない
例外は本当に想定外の受け皿
ある条件下で起こることがわかっているものはエラーとして処理するとうまくいく
0391デフォルトの名無しさん (ワッチョイ 4ea7-Z1/y)
垢版 |
2021/06/23(水) 22:58:23.05ID:oXoNjVOZ0
>>390
うーむ、DBのcompleteと
一連の処理の成功が
完全にイコールの場合はいいけど
最後にファイル書き込み&メール送信
失敗したらRollback
みたいなときは注意が必要だな
大抵はうまくいくけども
だからこそ落とし穴になるというか

システムにガッツリ入れ込むんじゃなくて使わないときの選択肢はほしいな
0392デフォルトの名無しさん (ワッチョイ 5a01-QZnr)
垢版 |
2021/06/24(木) 00:08:14.09ID:PG/lAwcj0
>>391
>最後にファイル書き込み&メール送信
>失敗したらRollback

それはファイル書き込みやメール送信が成功した後に
DBコミットが失敗するケースを考えないといけないから設計も運用も煩雑になるよ
DBコミット後にEventual Consistencyで対応したほうが楽

特にメール送信はキューへの書き込みくらいまでしかトランザクショナルに処理できないので
DBのトランザクションとは分けたほうがいいケースがほとんど
0393デフォルトの名無しさん (ワッチョイ 9b89-3lwz)
垢版 |
2021/06/24(木) 00:42:39.29ID:lRMvkPF00
質問失礼します。
いろいろ調べてこちらのコードを書いてみたのですが、実行するとForm1_Loadの中身が反映されません。
まだHello World くらいしかやったことがないので本当に初歩的な質問かもしれませんが、どうぞよろしくお願いします。

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
this.FormBorderStyle = FormBorderStyle.None;

this.WindowState = FormWindowState.Maximized;

this.TransparencyKey = this.BackColor;
}
0394デフォルトの名無しさん (アウアウウー Sa47-FswZ)
垢版 |
2021/06/24(木) 03:59:04.52ID:rpTvuBDma
>>393
この記事を読んでもらった方が早いねたぶん
http://dobon.net/vb/dotnet/help/eventhandler.html

イベントの「正体」はデリゲートというものを理解するまで理解できないと思う。
デリゲートは初心者にはなかなか理解しづらいと思うので、今は理解できなくてもそのうちわかると
気楽に考えた方がいいと思う。気にするとたぶん挫折する。
0395デフォルトの名無しさん (ワッチョイ 8abd-OKjj)
垢版 |
2021/06/24(木) 22:27:46.69ID:i+Vi3+/e0
教えて下さい。

List<List<string>> lstA = new...(略
for( 0から複数回ループ ){
List<string> lstB = new ...(略

switch aa{
case 1
lstB = 代入 break
case 2
   lstB=代入  break
case 3
   lstB = 代入 break

lstA.AddRange(lstB)
}

コード売る覚えですけど、リストの中にリストをぶっこみたいんですけど、未割り当てでdefaultがないと怒られるんですけど、例外がない場合ってどうしたらいいんですか?
0403デフォルトの名無しさん (ワッチョイ 7fa7-KW7t)
垢版 |
2021/06/25(金) 13:25:51.80ID:5MBIcCm10
ファイルフォーマットや電文にenum入れたクソがいて
文字列で保存されてたり
数値で保存されてたりして
グチャグチャなんだけど
enumの値ってどうやって保存しておくといいの?
0411デフォルトの名無しさん (アウアウウー Sad3-kMi9)
垢版 |
2021/06/25(金) 17:04:30.32ID:LgKicgUoa
>>403
別に揚げ足取りとかじゃなく、何がベストな方法かは要件次第なので、
要件をオープンにしたままで何がベストって言われても誰も答えようがないと思うよ。

なんか半年ぐらい前にもenumなんかイラネーって持論を展開してた人が
おった気がしたけどひょっとして同じ人だったりするんだろうかw
0420デフォルトの名無しさん (ワッチョイ 8f2f-Sr02)
垢版 |
2021/06/26(土) 22:10:38.87ID:jLzVoQEP0
>>419
ValueObjectは一般的にはDBやバックエンドAPIが裏にあり、オブジェクトの生成や破棄のコストはDB操作やWebリクエストに比べれば完全に無視できる
そのため制約が多くORM等のツールとの相性も悪い構造体をあえて採用する理由はないから、議論の余地なくクラスを採用すべき
DBが裏にないんだったらそもそもレールを外れているのでもはや一般論で議論しても仕方なくて、ユースケース等を考慮して君の頭で判断したらいい
0427デフォルトの名無しさん (ワッチョイ 3fe4-+WZO)
垢版 |
2021/06/27(日) 15:07:56.63ID:Zt61L+c30
質問させてください。
ある特定のライブラリを使わなくてはいけなくて、そのメソッドは引数にrefが付いているものになります。
このメソッドに渡したいのは不変の値(constの意味)となります。

不変の値自体は別クラスに用意してあって、各所で使いまわしたいので読み取り専用のプロパティかstatic read onlyで定義したのですがrefが付いた関数に渡そうとするとstaticなものは渡せない、型が適していないとエラーとなります。

public constのような記述はすべきでないと見たことがあるので避けたいと思うのですが、初期化以降で変更を受け付けず、かつ各所で使えるようにして、参照渡しのメソッドも使えるようにするにはどのような方法が考えられますでしょうか?

分かりにくい説明で申し訳ありません。
0432デフォルトの名無しさん (ワッチョイ 3fe4-+WZO)
垢版 |
2021/06/27(日) 16:42:23.92ID:Zt61L+c30
>>427です
ありがとうございます。
そうか、1度ローカル変数に入れれば良いのですね…思いつかなかった。

具体的には制御装置と通信、データ操作する為のライブラリです。
自分は装置データの参照(○○という制御データの値を取得)しか利用するつもりは無かったのですが、よくよく考えれば、プログラム上で値を保持し続けて、そのデータを更新したりする場合には値を書き換えるのでrefでも良いのかもしれません。
もう一度マニュアルを読み直してみます。
0434デフォルトの名無しさん (ワッチョイ 3fe4-+WZO)
垢版 |
2021/06/27(日) 17:07:52.92ID:Zt61L+c30
>>432
自分で書きましたが違いますね…
○○ってデータを取ってこいという○○の部分は文字列としてメソッドに渡す仕様になっているのでデータそのものは変えていません。
やっぱり特別な意味があるのかもしれません(ないかもしれません)ので改めて確認してみます。
何度も書き込んですいませんでした。
0435デフォルトの名無しさん (アウアウウー Sad3-kMi9)
垢版 |
2021/06/27(日) 18:33:32.39ID:t/dm3/tna
普通は意図をもって引数にrefを付けてるはずでしょうw
もちろんメソッドを書いた人が何か勘違いしてる可能性もないことはないが、普通は考えにくいよね。

いずれにせよ、refの引数を取るメソッドに対して

(1) 定数やリテラルを渡したい
(2) refによる「戻り値」は必要ない

こういうケースは普通にありえる。
0437デフォルトの名無しさん (ラクッペペ MM4f-tCTE)
垢版 |
2021/06/27(日) 19:15:22.32ID:mGOIcE7NM
TryParseで真偽値だけで要件満たす場合とか普通にあらあな
そもそもこの話は
* 無理なんでラッパメソッドでも噛ましてください
* そんなに気になるなら作者に質問してください。ここは作者の気持ちを予想するスレッドじゃないんでね(文系板に行くといいと思うよ)
で終わってる
0438デフォルトの名無しさん (アウアウウー Sad3-kMi9)
垢版 |
2021/06/27(日) 19:25:36.70ID:t/dm3/tna
>>436
あんまり意味がある質問と思えんけど例えば

// EnqueueとDequeueを同時にやる
bool TryEnDeQueue<T>(ref T inOUt> {...}

こんなメソッドがあったとして、キューにリテラルを
突っ込みたいケースは普通にありえるし、
キューから取り出した値は必ずしも使わない(キューの要素数を変えたくないだけ)
というケースもありえるだろう。
0441デフォルトの名無しさん (テテンテンテン MM4f-jzci)
垢版 |
2021/06/28(月) 07:27:53.64ID:3BMv071BM
値渡しではなく参照渡しであることを明記するキーワードのつもりで「ref」を書いてるとかじゃないかな
そういうクソみたいなコードのライブラリを平気で売ってる会社も世の中にはごまんとあるぞ
0444デフォルトの名無しさん (ワッチョイ ff8b-Rf0K)
垢版 |
2021/06/29(火) 08:13:02.33ID:upDN03IZ0
VisualStudioで、C#を使ってプログラムを作成しています。webview2で待機する方法が見つからず困っています。
どう調べても出てこないので、ヤフー知恵袋で聞いてみましたが、回答をいただけず再投稿中です。質問の仕方がよくないのかもしれないですが…。
どうかよろしくお願いします。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14245327539
0445デフォルトの名無しさん (ワッチョイ 3f01-EKdG)
垢版 |
2021/06/29(火) 08:42:27.78ID:WsUITHRN0
俺も初心者だけど、頑張って非同期処理学んだよ
非同期処理ってネット接続前提のプログラム書くなら避けて通れないんじゃね・・・(と思って俺は頑張った
0447デフォルトの名無しさん (アウアウクー MMa3-MDar)
垢版 |
2021/06/29(火) 13:32:10.90ID:+VG1N6hxM
>>446
そういう時って解決した方法を書いて残した方が良い
0452デフォルトの名無しさん (ワッチョイ 1ea7-tO4e)
垢版 |
2021/07/03(土) 11:39:31.05ID:tKf1c0EP0
>>451
遅い
だから速度に頼った実装はできない
画像処理なんかで速度が動作に関わってくるところは
思い切ってc++で組んでもいいかも?
データ移すのに時間かかってて意味なかったよってあるかもしれんが
0454デフォルトの名無しさん (ワッチョイ 8f5f-Q9JX)
垢版 |
2021/07/03(土) 12:08:20.73ID:w8WWCmjZ0
UIをC#、
高速化の必要なロジックはC++とかでもいいんじゃないの

最近色んな機械の監視装置とか作るけど、
監視してアラートを上げるところまではC++にしてるよ
0455デフォルトの名無しさん (ワッチョイ 8f5f-QeXB)
垢版 |
2021/07/03(土) 13:13:05.85ID:R7OScebH0
>>451
ボタンのイベントハンドラ内に処理を全部突っ込んで、ボタン押した時にウインドウが「応答無し」になったのを見て
「C#ってモッサリしてるんですね」って言ってる人を思い出した

ライブラリ使わずに自前で画像処理とかするのでもない限り、C#は十分な速度が出るよ
むしろヘタにC++で車輪の再発明されるより、C#でうまくライブラリも活用してくれた方が処理速度も開発速度も早いことが多い

まあ、コンパイラの最適化を超えるような本気で書かれたC++にはもちろん勝てないけど、そんなことができる人はここでそんな質問しないよね
(自分でベンチマークして確かめるから)
0456デフォルトの名無しさん (ワッチョイ ab24-U8JP)
垢版 |
2021/07/03(土) 15:13:32.95ID:B0HXpNBH0
>>454
それよく言うけどUI部分でこそ差つくんだよな
WinFormsやWPFでGUI作るとコントロール上でマウス動かすだけでメモリがんがん増えてくしな
OnMouseMoveとか呼ぶたびにオブジェクト生成してるからだと思うけど
0460デフォルトの名無しさん (ブーイモ MMb6-ThLM)
垢版 |
2021/07/03(土) 18:13:55.16ID:xqsTC6PPM
スレッドセーフじゃないメソッドを擬似的に非同期に見せるためにメッセージループみたいな仕組みを作りたいんだけどなんか簡単な実装方法ってないかな?
非同期キューと無限ループするスレッドを作ってぐるぐる回す的な実装なら作れるんだけど
スレッドが落ちた場合にどうするか、ループぐるぐる回すとCPU無駄じゃないか、でもDelayで待つのもTask大量生成して勿体無い気がする、、、
みたいに考え出すとよくわからなくなった
思考停止して使えるライブラリがあるならそれ使いたい
0461デフォルトの名無しさん (アウアウウー Sacf-US9C)
垢版 |
2021/07/03(土) 18:29:30.32ID:gYtBLHlma
>>460
ちょっと何を言ってるのか。

スレッドセーフとは不特定のスレッドからの呼び出しで問題を起こさないこと。
非同期とはメソッドの処理が呼び出し側と別のスレッドで実行されること。

この2つがどう矛盾するのかさっぱり。
0464デフォルトの名無しさん (ブーイモ MMb6-kf3V)
垢版 |
2021/07/04(日) 00:40:45.70ID:YIai1OGNM
>>461
非同期処理は単に処理の終了を待たないだけで必ずしも別スレッドは必須じゃない
非同期処理≠並列実行

時間分割のマルチタスクで同じスレッドで実行されるかもしれない
0466デフォルトの名無しさん (ワッチョイ 0b90-TnCX)
垢版 |
2021/07/04(日) 01:46:34.84ID:pwN2nm3/0
スレッドプールのスレッドで他のスレッドで長い処理しててしかも一つしか空いてなく、かつ最大スレッド数に達してスレッド数増加できなかったら
同じスレッド使ったりとか
0471デフォルトの名無しさん (ブーイモ MMc6-kf3V)
垢版 |
2021/07/04(日) 23:19:38.18ID:LPsaiBJHM
>>465
c#どうこうじゃなくて一般的に非同期処理って別に他のスレッドを使いますって言ってない
ノンブロッキングなものが非同期であるだけ

初心者が非同期処理を並列処理そのものと勘違いするから嘘を教えないで欲しいだけだ
0472デフォルトの名無しさん (アウアウウー Sacf-US9C)
垢版 |
2021/07/04(日) 23:49:45.24ID:2lvTDu+Ca
>>471
もう言ってること無茶苦茶w
逆である。

「一般的には」マルチスレッドを使って複数の処理を並列に走らせることを非同期という。

VBAみたいなマルチスレッド非対応の環境で疑似的に複数の処理を並列に走らせることを
便宜上「非同期」と呼ぶことはあるいはあるかもしれない。

しかしそれはあくまで括弧つきの「非同期」だ。
一般的な非同期ではない。
0473デフォルトの名無しさん (テテンテンテン MMc6-rRq2)
垢版 |
2021/07/05(月) 00:05:47.95ID:YTxGqAmPM
>>472
> 「一般的には」マルチスレッドを使って複数の処理を並列に走らせることを非同期という。
プログラムとデバイスで処理を並列に走らせるのも非同期だよ
お前の一般的の世界が狭すぎるだけ
0474デフォルトの名無しさん (アウアウウー Sacf-US9C)
垢版 |
2021/07/05(月) 00:19:55.55ID:7etiVvGGa
>>473
SendXXに対してPostXXを非同期と言ったりもする。
だが>>460はそんな話はしていない。

頭痛いバカだな。少しは文脈を考えてくれ。
こういうバカ、自分がくだらない揚げ足取りをやっている自覚が本気でないんだろうか。
0476デフォルトの名無しさん (ワッチョイ 1ea7-tO4e)
垢版 |
2021/07/05(月) 02:32:04.04ID:lVBHv1fU0
グーグル先生

同期処理では、あるタスクが実行している間、他のタスクの処理は中断される方式です。 非同期処理は、あるタスクが実行をしている際に、他のタスクが別の処理を実行できる方式になります。
0482デフォルトの名無しさん (テテンテンテン MMc6-Gp+e)
垢版 |
2021/07/05(月) 09:32:14.42ID:o1i1lUq1M
Async/Awaitはマネージスレッド使ってるケースのほうがむしろ少数派じゃないの
ネットワーク、DB、ファイルIO、どれをawaitしてもマネージスレッドはほとんどの場合シングルスレッドだよ
0483デフォルトの名無しさん (ワッチョイ 23e5-T6PF)
垢版 |
2021/07/05(月) 10:41:33.34ID:hHXc8jy70
インスタンスをもりもり作ってて思ったのですが、プログラムが実行されているコンピュータにインスタンスが作られているんですよね?
クラサバならクライアント
webサーバならwebサーバに
0484デフォルトの名無しさん (ラクッペペ MMc6-Q0eP)
垢版 |
2021/07/05(月) 11:49:46.38ID:d5yMegV0M
歴史をコリエイトする!みたいな?
0485デフォルトの名無しさん (ブーイモ MMb6-ThLM)
垢版 |
2021/07/05(月) 11:57:54.93ID:WdSYkRT7M
>>460だが結局Channelで実装したよ
Awaitしやすくて便利やねChannel
もう非同期コレクション要らないんじゃないかな
ぐるぐるスレッドが例外でも補足できないレベルで異常終了したら
どう回復すんのかわからんけどそんなこた無いだろうということで妥協
0486デフォルトの名無しさん (ワッチョイ 1ea7-tO4e)
垢版 |
2021/07/05(月) 13:22:46.85ID:lVBHv1fU0
まあ、c#のお手軽非同期処理って使ってあるところだいたいバグってるよね

スレッドが2つあったら
単位時間あたりの処理の分け前って一体どうなってん?
って計画されてない処理はだいたい本番であの世行きなんだけど
引数にそんなのいれるとこないしねw
0487デフォルトの名無しさん (アウアウクー MM63-uuo+)
垢版 |
2021/07/05(月) 14:37:10.58ID:q4xU82vuM
データベースとの接続やデータのやり取りはEntityFrameorkを使う事が一般的なのでしょうか?
SQLを書くやり方と、EntityFrameorkを使う場合の切り分ける基準はどこになりますか?
0488デフォルトの名無しさん (ワッチョイ 86da-YEpR)
垢版 |
2021/07/05(月) 14:50:43.99ID:RRwsgi3K0
開発生産性かな。
テーブル構造がコロコロ変わる開発初期段階でEF使うととっても楽よ。
コードファーストなEFが勝手にDBを変更してくれるから別途DB管理ツールがいらないのでC#のみに集中できる。

すでにかっちりとしたDB(テーブル)があるモデルファーストなら、速度面重視でEFよりdapperかな
EFは機能がリッチな分、テーブル内の大量レコードを扱うと速度面不利なところがある。
小規模人数しか使わないシステムならEFでも全然アリ。
不特定の数万人が使うシステムならEFで初めて方針が固まったところやボトルネック部分を
dapperに置き換えるか、巣のSQL文にしていく。
0490デフォルトの名無しさん (ワッチョイ 8e67-Z49C)
垢版 |
2021/07/05(月) 19:15:27.44ID:HXCyr6Ze0
try-catchの外からcatchの中にgotoでジャンプって出来ないのね
逆にcatchから抜けるのは出来るみたいだから同じ処理2回書かなくて済んだけど、
ifやループの中にジャンプはできて何故これが出来ないんでしょうか
0496デフォルトの名無しさん (ワッチョイ 1ea7-tO4e)
垢版 |
2021/07/06(火) 00:52:48.52ID:661qfOKl0
そしてこれは多分まずい
空文字をゼロにできても
ゼロを空文字には戻せないから
また、元からゼロのモノと空文字だったものもどう判別するのか?
まあ、普通はやんね
仕様から見直す必要があると思われる
0497デフォルトの名無しさん (ワッチョイ ab2c-Ijop)
垢版 |
2021/07/06(火) 01:00:07.10ID:AJxevGXU0
Ruby on Rails ではデフォルトで、Active Record と言う、O/R マッパー

Web 系では基本、SQL インジェクションされるから、
文字列を結合して、SQL文を作ってはいけない

Place Holder を使っているなら、エラーにされるから良いけど
0498デフォルトの名無しさん (アウアウクー MM63-uuo+)
垢版 |
2021/07/06(火) 08:35:52.20ID:WEJnPcRAM
>>487です

>>488
>>489
ありがとうございます。
早速EntityFrameworkを使用してみました。
コードファーストでDBを作成し、visual studioのSQL Serverオブジェクトエクスプローラー上でもDBが作られている事は確認出来ました。
ただこのデータベースはSQL ServerのSSMS上に表示されていません。
SSMSから見れないのが仕様なのでしょうか?
0503デフォルトの名無しさん (ワッチョイ 035f-Ijop)
垢版 |
2021/07/06(火) 21:32:01.28ID:unMXYXmh0
int x = 0;

x == 0
x.Equals(0)
x is 0

なんで3つも書き方があるんだ?
0506デフォルトの名無しさん (スププ Sdaa-Z9vJ)
垢版 |
2021/07/07(水) 05:58:23.14ID:3z2Vox4wd
>>492
あー、前ゼロ付けたいのね?
外出先のスマホだから調べにくいけど、Formatとかの書式変換みたいなの調べれば良いと思うよ。
ただ空白をゼロにするだけならリプレイスで。
0508デフォルトの名無しさん (ラクッペペ MMc6-n/eC)
垢版 |
2021/07/07(水) 11:54:05.00ID:s2USQjL6M
ナイスジョーク!
お前の顔の造形くらいには面白いな
0516デフォルトの名無しさん (ワッチョイ 7f68-kf3V)
垢版 |
2021/07/08(木) 06:07:58.03ID:1YfxefkH0
>>503
機能は同じでも仕様の由来というか系統が違うんじゃない?

x == 0 は通常の比較演算子。

x.Equals(0) はメソッド。
自分で比較の条件を組んでIEquatable<T>でオブジェクトに等価性判断の実装したりとか。
ぶっちゃけ、自分で組んだら比較した振りも出来てしまう。

x is 0 はパターンマッチングとかいう奴かな。自分はよく理解してない。
0520デフォルトの名無しさん (ワッチョイ 355f-xNKK)
垢版 |
2021/07/09(金) 13:00:38.04ID:oetY1l3k0
>>510
.NET Frameworkが何もなしに動くと思ってそうだなあ
0523デフォルトの名無しさん (ブーイモ MMc9-u7yY)
垢版 |
2021/07/09(金) 19:04:45.72ID:lAEJntQuM
>>510
Core系(.NET5以降含む)は基本的にWindowsに入ってないことを前提にするのが正しい
頻繁に更新されて全部サイドバイサイドだから、利用者にインストールを要求するのもやめた方がいい
デスクトップアプリなら>>511の言うようにランタイムを丸ごとぶっこむ方式の一択と考えていい
実行環境の.NETランタイムに依存していいのはWebアプリなどでデプロイ先のマシンが完全に自分の制御下にある場合のみ
デプロイ時のファイルサイズを抑えるためのキャッシュみたいなもんだ
0526デフォルトの名無しさん (ワッチョイ 2301-+3pb)
垢版 |
2021/07/10(土) 05:46:33.21ID:QMdSDj/s0
コンソールアプリでHtmlを取得するプログラムを試しています
ちょっと古いのですが、勉強のため、DownloadStringAsyncを使っています
完了処理を登録したイベントハンドラがうまく動きません。理由はどこにあるのでしょうか?

static void Main(string[] args)
{
var uri = new Uri("https://www.yahoo.co.jp/";);
GetHtml(uri);
}

static void GetHtml(Uri uri)
{
var client = new WebClient();


ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

client.DownloadStringCompleted += Client_DownloadStringCompleted;
client.DownloadStringAsync(uri);
}

private static void Client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
MessageBox.Show(e.Result);
}
0527デフォルトの名無しさん (ワッチョイ 2301-+3pb)
垢版 |
2021/07/10(土) 05:46:50.70ID:QMdSDj/s0
DownloadStringAsyncではなく、DownloadTaskAsyncを使った場合はHtmlをちゃんと取得できています。
(文字化けにはまだ対応してませんが)

static void Main(string[] args)
{
var uri = new Uri("https://www.yahoo.co.jp/";);
var result = GetHtml2(uri);
MessageBox.Show(result.Result);
}

static async Task<string> GetHtml2(Uri uri)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
var client = new WebClient();
var result = await client.DownloadStringTaskAsync(uri);
return result;
}
0530デフォルトの名無しさん (ワッチョイ 2301-+3pb)
垢版 |
2021/07/10(土) 08:31:16.30ID:QMdSDj/s0
>>528,529
ありがとうございます

Mainの最期にConsole.Readline();を入れたら動きました
よく見たら自分の使っているテキストにもこれが入ってました
見落としていました

DownloadStringAsyncはawaitには対応していないということなので、>>526をawaitを使って書きかえることはできないという認識でいいですか?
0532デフォルトの名無しさん (ワッチョイ 355f-xNKK)
垢版 |
2021/07/10(土) 09:13:10.13ID:o1Fr1a0g0
.NET Frameworkはもう先がないので今新規開発するなら.NET 5一択
.NET Frameworkからの移行は手間がかかる
0535デフォルトの名無しさん (ワッチョイ 2301-+3pb)
垢版 |
2021/07/10(土) 11:59:52.40ID:QMdSDj/s0
>>532
VSのアプデがうまくいかなくて.NET5導入失敗してます
ちょっと調べてみます
>>534
自分でたまに作るショボイアプリでは使ってます
ただ、今みたいに適当にググってなんとなく使ってるとわけ分からなくなってくるので
頭整理して、基本的な雛形作っておこうかなと
0538デフォルトの名無しさん (アウアウウー Sa09-9K0I)
垢版 |
2021/07/10(土) 13:12:27.70ID:6cPOy8xla
俺はフレームワークのプレインストールは要らないと思うな
シングルバイナリとランタイム依存版をセットで提供するだけ
ランタイム依存版は使いたい奴だけ使えばいい
そいつは解ってる奴だからランタイムも自分で勝手にインストールするはずだ
解って無いやつは何も考えずにシングルバイナリでいい
解ってるけど多少の労力を支払ってまでランタイム依存版を使うほどリソースに困ってない人もシングルバイナリでいい
0539デフォルトの名無しさん (アウアウウー Sa09-QOAx)
垢版 |
2021/07/10(土) 14:42:20.88ID:PtGlam4/a
>>538
その辺よく知らんのだけど、昔のスタティックリンクとは違うわけ?

つまり、実質的にまったく同一のバイナリが複数メモリーを
占有するようなことは起こらないような仕組みになってるん?
0540デフォルトの名無しさん (アウアウウー Sa09-9K0I)
垢版 |
2021/07/10(土) 15:39:29.96ID:qTmdpryya
>>539
仕様上はどうなってるか知らんがメモリには別々にロードされるんじゃないかなと思う

殆どの場合はその程度のリソース消費は気にしなくていい
特にDNFがプレインストールされてないとトラブるような情弱にはリソース使用量の最適化とか縁のない話
こいつらには細けぇことはいいからシングルバイナリ使っとけ!でおk
なのでフレームワークのプレインストールは要らない

リソース使用量を最適化してマシンを限界まで使い倒すぞ
なんていう連中なら苦もなくランタイムとランタイム依存版バイナリをインストールして使うはずだ
だからやっぱりプレインストールされている必要はない
0545デフォルトの名無しさん (ワッチョイ f573-DcAx)
垢版 |
2021/07/10(土) 18:11:47.93ID:fmB/UGP20
単一かつ自己完結は実行開始までが遅いからコンソールには向いてない。
フォームだとReadyToRun含めるとウィンドウ表示するだけで100メガあるうえ、起動までi9900KSでも3秒かかるっていう...

よほどnet5の機能つかってるとかでないと、.net frameworkの方が向こう5年は取り回しがしやすい。
0548デフォルトの名無しさん (ブーイモ MMc9-u7yY)
垢版 |
2021/07/10(土) 19:10:49.52ID:pM3BYo7pM
>>537
それが逆に.NETの進化を停滞させた、とMSは考えているようだ
まあ元々は.NETってWindowsの基幹になるはずだったわけで、その目論見が頓挫した時点でもうWindowsにバンドルする理由はなくなったんだよ
0553デフォルトの名無しさん (ワッチョイ cb8e-Fz9b)
垢版 |
2021/07/11(日) 00:00:18.89ID:AMGtLvlu0
>>532
こういう馬鹿がいたよね、WPFの時
0557デフォルトの名無しさん (ワッチョイ cbb0-U415)
垢版 |
2021/07/11(日) 09:28:36.06ID:LL6sPKEi0
>>548
進化というと聞こえはいいけど、サポートを長く続けたくないってのもあるんだろうなぁ。
今でも長期サポートするアプリケーションなら.NET Frameworkの方を検討するだろうし。
0566デフォルトの名無しさん (テテンテンテン MMcb-Yh25)
垢版 |
2021/07/11(日) 16:46:46.30ID:qTMmoATzM
>>563,565
推してるとかどこから出てきたんだよ
単にVB6が今でもサポートされてるなら.NETFrameworkもサポートされんじゃね?
って話だろ
人が嫌われるかどうか心配する前に自分の理解力を心配しなよw
0572デフォルトの名無しさん (アウアウウー Sa09-QOAx)
垢版 |
2021/07/11(日) 17:24:32.12ID:pF41bBSFa
こう言ってはなんだけど、「サポート」されているかどうかは
営業面では重要な意味を持つけど、大半のエンジニアにとっては「それが何か実質的な意味を持つのか?」
っていうのが率直なところじゃないの?
0575デフォルトの名無しさん (ワッチョイ f573-DcAx)
垢版 |
2021/07/11(日) 21:48:39.79ID:cxQyUkFy0
.net frameworkはwindows updateに入ってるから勝手にセキュリティの穴や不備も塞がるが、
.netの方はどういう対策予定になってんの?

プログラム無知な個々人さえわざわざあの.net5のランタイムを細かなアップデートに合わせて取りにいく想定なの?
あるいらアプリ作者がこのランタイムの細かなアップデートに合わせてアプリ再配布する想定なの?
0576デフォルトの名無しさん (ワッチョイ ab2d-O0xy)
垢版 |
2021/07/11(日) 21:55:49.88ID:JpOAcHlL0
Windows Updateのオプションの他のMS製品の更新プログラムを受け取るを有効にしたら
.NET 5や.NET Core 3.1のセキュリティアップデートが適用された
インストーラーで入れたやつだからかな
0577デフォルトの名無しさん (テテンテンテン MMcb-u7yY)
垢版 |
2021/07/11(日) 21:55:56.30ID:gcLNEatSM
基本的に作者の責任だね
.NETに限らず、ライブラリをスタティックリンクしたりDLLを同梱したり普通にあるでしょ
デスクトップアプリが使ってるライブラリの脆弱性が問題になることなんて実際まず無い
そんなことを気にするよりREADMEにパスワード使いまわしはやめましょうとでも書いて啓蒙活動でもしたほうがよほど効果あるよ
0581デフォルトの名無しさん (ブーイモ MMeb-u7yY)
垢版 |
2021/07/11(日) 23:56:07.09ID:W/0BfvqFM
そもそも.NET5って来年2月でサポート切れてWindowsUpdateによる更新もされなくなるし、今後出るであろうLTSでもサポート期間は3年しかない
セキュリティアップデートなんて真面目に気にしてたら塩漬け運用は不可能だ
幸いにもアプリにスタティックリンクされたランタイムやライブラリの更新って組織のセキュリティポリシーでは見過ごされがちなんで、
サポートの切れた.NETランタイムのインストールをユーザーに要求するよりはSCDの方が面倒なことになりにくいだろうね
0582デフォルトの名無しさん (ワッチョイ cb8e-Fz9b)
垢版 |
2021/07/12(月) 02:10:19.60ID:IjeYV4lO0
さてここで、繰り返そう

>>532の発言内容

>.NET Frameworkはもう先がないので今新規開発するなら.NET 5一択
>.NET Frameworkからの移行は手間がかかる
0583デフォルトの名無しさん (アウアウウー Sa09-6Mb1)
垢版 |
2021/07/12(月) 02:28:22.02ID:PmY8iF4Ja
正直ここ数年は.NETもC#も片手間以下にしか触ってなかったので
CoreってWindows 8の時代のPCLの延長線上のもの、要するに
最大公約数的なサブセット(要するに使えねえ)って認識だったんだけど、そうでもないのかw
0584デフォルトの名無しさん (ワッチョイ 355f-KGMb)
垢版 |
2021/07/12(月) 02:28:52.13ID:pg+kHsI00
>>538が正解じゃないの
どっちかだけってのがユーザーに不便強いてるよね
0587デフォルトの名無しさん (ワッチョイ 054f-O0xy)
垢版 |
2021/07/13(火) 11:33:09.20ID:oyMxwOQE0
C#でアプリ作れるようになったらC++で応用って効きますか?
C++でただ球が跳ねつづける画像とかパックンみたいの作ってみたくて学習始めたんですが
ロベールのコピーコンストラクタ辺りで何してるのかよくわからなくなってしまって
0588デフォルトの名無しさん (ブーイモ MMeb-u7yY)
垢版 |
2021/07/13(火) 11:38:39.95ID:ugiVX/deM
それはC#もよく分かってないんじゃないかな
C#で値型と参照型を正しく理解していて、C++ではそれぞれがどう表現されるかが分かれば、
コピーコンストラクタがなぜ必要でどういう挙動をするかは自明なはず
0589デフォルトの名無しさん (エムゾネ FF43-Keio)
垢版 |
2021/07/13(火) 11:40:40.89ID:WUJYnH4rF
C#とC++は全く別物
そりゃプログラミング未経験から学ぶのに比べればメリットあるけど
せいぜいその程度
0590デフォルトの名無しさん (ワッチョイ cbbb-iyCa)
垢版 |
2021/07/13(火) 11:40:46.31ID:npKAmtA00
>>587
文法が似ているとかデザインパターンの学習が無駄にならないっていう限度でなら応用が効くでしょう
しかし、それぞれの言語で難点となっている部分が全くもって別なので、学習が大変な部分には全くと言って良いほど応用が効きません
0591デフォルトの名無しさん (エムゾネ FF43-Keio)
垢版 |
2021/07/13(火) 11:41:00.44ID:WUJYnH4rF
場合によってはC#の知識がC++習得の邪魔をするかも知れないね
0592デフォルトの名無しさん (エムゾネ FF43-Keio)
垢版 |
2021/07/13(火) 11:42:03.56ID:WUJYnH4rF
Keioワロス
0594デフォルトの名無しさん (ブーイモ MMeb-u7yY)
垢版 |
2021/07/13(火) 11:58:30.95ID:ugiVX/deM
>>591
俺はC#からの類推で自然に馴染めたけどな
C#からC++へ行くときのハマりポイントって多分RAIIの辺りだと思うけど、
C#においてオブジェクトが今どこにあるのかを意識してプログラミングしていればそんなにギャップはないと思う
0597デフォルトの名無しさん (アウアウウー Sa09-6Mb1)
垢版 |
2021/07/13(火) 13:00:54.76ID:oMy7Gq1va
最終目的はC++の習得で、そのためにC#を学ぶことに意味があるか、
それともただ回り道になるだけで無意味かって意味なら、
まったく無意味とも言えない思う。

少なくともOOP的な部分については後発のC#の方が
いきなりキメラでカオスなC++でやるより理解が早い気がする。

案外最短コースはC→C#→C++かもしれんよ。
いや知らんけど。
0601デフォルトの名無しさん (ワッチョイ 2390-epCi)
垢版 |
2021/07/14(水) 02:20:44.38ID:cEzLlJ010
でも、今はC++敷居下がってる
俺もずっと前にやったとき挫折したけど、数年前にやったらいけた
俺がその間に経験積んだのも事実だが、modern c++ってすげぇc++で作りやすくなってた
c++20でとりあえず低レベルなコルーチンきて?
c++23でasync/awaitな高レベルなインターフェース用意されるのかな
どんどん使い安くなってると思う
0604デフォルトの名無しさん (ワッチョイ fd88-DcAx)
垢版 |
2021/07/14(水) 02:27:21.43ID:iC7aHD9J0
C++もany variant optionalなどが入ったからある程度はc#のマネージな考え方に近づいてるが、
今から始める人にはchar*とwchar_t*とwstringとstring に加えて u8string やu16string など文字列系がカオスだろなぁ。

しかもdll作る際は結局はインターフェースはプリミティブ型だけしとかないと、
まともに使えないdllになるから、テンプレートや新規に入った型も限定的な環境でしか役にたたんしw
0605デフォルトの名無しさん (ワッチョイ 2390-EAnP)
垢版 |
2021/07/14(水) 02:33:39.69ID:cEzLlJ010
>>604
そうそれ。c++選択肢多いから、俺みたいに細かい人が最初やるには向いてない
文字列の話だって.netならutf -16の標準stringを取りあえず使っておけばいいけど
c++だとどのエンコード使おっかなとか下らない事で悩んで先に進まなくなる
0606デフォルトの名無しさん (ワッチョイ 8d54-8NFQ)
垢版 |
2021/07/14(水) 02:41:48.38ID:veS53koK0
自分の場合、Windows の GUI アプリ作りたくて C++ 始めたけど、プログラム知識ほぼ 0 の時に、C + API と、C++ + MFC のGUI アプリのサンプルソース読んで一回諦めた。
C# 始めてから C++ 始めたことで救われた。

細かい所を確認しながら進めないと気が済まない + 目標までのハードルがめっちゃ高いと感じると心が折れる。
こんな人は、C++ の前に C# やるべき。
0609デフォルトの名無しさん (ブーイモ MMeb-u7yY)
垢版 |
2021/07/14(水) 09:48:23.28ID:gix7WKJqM
>>606
俺もそうだわ
C++はWINAPIだの仮想デストラクタだのと意味不明なお約束があまりにも多すぎて習得できる気がしなかった
C#の後だと重要なところと後回しでいいところの区別がついてすんなり入れたな
0613デフォルトの名無しさん (ワッチョイ 23e4-HFg0)
垢版 |
2021/07/14(水) 17:09:46.93ID:9x2VN1AY0
var test1 = メソッド1();
var test2 = メソッド2(test1)
var test3 = メソッド3(test2)

こんなふうに数珠繋ぎみたいに結果を渡していくやり方は作り方を見直したほうが良い?
メソッドの引数は値のコピーを渡してるから呼び出し元には影響ないのは分かるけど、どこでどの値を変えてるか分かりにくくなってバグを生み出しやすい作りな気もしてる
初歩的な質問で申し訳ないけどアドバイスいただきたい
0615デフォルトの名無しさん (ブーイモ MMeb-u7yY)
垢版 |
2021/07/14(水) 17:34:07.92ID:gix7WKJqM
>>613
うん、良くないね
君も気付いてる通り、引数のコンテキストがどんどん肥大化してどこで何やってんのか分からなくなる典型的なアンチパターンだ
ほんとにそのテスト2〜3は引数に渡されたオブジェクト全体を使ってるの?
やりたいことは、
var c = new C { A = test2(test1.X), B = test3(test1.Y) };
だったりしない?
0616デフォルトの名無しさん (アウアウウー Sa09-9K0I)
垢版 |
2021/07/14(水) 17:50:29.76ID:QC3eIOjva
>>613
いいと思うよ
例えばだけどこういうことだろ?

基本価格 = 基本価格取得();
割引価格 = サマーキャンペーン割引(基本価格);
税込価格 = 消費税加算(割引価格);

とてもクリーンで見やすいコードじゃないか

ただタイピングが楽になるからメソッドチェーンにしたい欲求はある

基本価格取得()
 .サマーキャンペーン割引()
 .消費税加算();
0617デフォルトの名無しさん (ブーイモ MMeb-u7yY)
垢版 |
2021/07/14(水) 18:16:23.00ID:gix7WKJqM
>>616
どこでどの値を変えてるか分かりにくくなりそうって言ってるから、単純なスカラー値ではないんじゃないの
var 注文 = 注文を取得();
var キャンペーン適用済み注文 = キャンペーン適用(注文);
var 送料計算済み注文 = 送料計算(キャンペーン適用済み注文);
みたいな感じと想像した
0618デフォルトの名無しさん (ワッチョイ 23e4-HFg0)
垢版 |
2021/07/14(水) 18:19:46.23ID:9x2VN1AY0
>>614 >>615
やっぱり良くないか…
引数に渡してるものは部分的にしか使ってない
例えば100個くらいの配列を渡してこの中の10個くらいしか使ってない

>>616
これはこの内容で良さそう
やる事が一貫してるというか意味が通じてるというか

最初に挙げた例と違って申し訳ないんだけど、実際にやりたいのはこんな感じ
数珠繋ぎとは少し違う、ごめん

@全装置データ = 装置A〜Zデータ取得()
A正常or異常 = 装置AデータDB書き込み(全装置データ)
B正常or異常 = 装置BデータDB書き込み(全装置データ)
.
.
.
C正常or異常 = 装置ZデータDB書き込み(全装置データ)
D正常or異常 = 装置へデータ書き込み(全装置データ)

メソッドに渡すのはコピーとはいえ、@で取得したデータを色んな所へ渡して使い回してて、どこかで値が変わってしまう可能性も含んでる作り方なのかなと思って>>613の質問に至ったの
0619デフォルトの名無しさん (アウアウウー Sa09-6Mb1)
垢版 |
2021/07/14(水) 18:32:18.26ID:aEJsAOR7a
>>618
結局何が聞きたいのかどうもよく分からないな。

>>613みたいに一時的な説明変数に戻り値を入れるのは
一般論としては何も悪くない。

引数で渡した参照型の値が破壊されるのを心配するなら(そんなのほとんどの場合杞憂だと思うけど)
適当なインターフェイスをかぶせてそのインターフェイスとして渡すか、
イミュータブルにするだけじゃないの?
0621デフォルトの名無しさん (アウアウウー Sa09-9K0I)
垢版 |
2021/07/14(水) 19:02:26.74ID:QC3eIOjva
>>617
その場合はその業務は誰の知識なのか?に注目する

メソッドの引数と返り値をスカラーにした場合、そのメソッドの「呼び出し側」が
1 引数のエンティティから適切な属性を取得し、2 メソッドを呼び出し、
3 引数そのものあるいはクローンに対して適切な属性を更新する
方法を「知らなければならない」

例えばサマーキャンペーン割引のロジックが「注文の合計基本価格が10000円以上、注文明細のどれか1つでもキャンペーン対象商品フラグが立っていること」だったらどうだろうか?

メソッドの呼び出し側はきっとこう思う筈だ
俺は注文をサマーキャンペーン割引して欲しいだけなのに、
なぜかサマーキャンペーン割引に合計基本価格と注文明細のキャンペーン対象商品フラグが必要だという業務知識を知らなければならない
ただ黙って割引してほしいだけなのに、なんで俺が適切な情報をいちいち与えてやらなければならんのだ
そんなのはサマーキャンペーン割引の責務を担うメソッドが知っているべきだろう
0622デフォルトの名無しさん (アウアウウー Sa09-9K0I)
垢版 |
2021/07/14(水) 19:11:44.77ID:QC3eIOjva
>>618
この場合もまずは責務を明確にしてメソッドを分けるといいよ

1. オンメモリのデータセットから特定のデータを正確に抽出する責務を担ったメソッド
2. 単にデータをDBに書き込む責務を担ったメソッド

つまりこういうこと↓

a = Aデータ抽出(全データ)
b = Bデータ抽出(全データ)

z = Zデータ抽出(全データ)

結果A = リポジトリA.save(a)
結果B = リポジトリB.save(b)

結果Z = リポジトリZ.save(z)
結果All = リポジトリAll.save(全データ)
0624デフォルトの名無しさん (ワッチョイ 9b62-yxX3)
垢版 |
2021/07/14(水) 23:09:43.35ID:ikn1S79j0
>>618
メソッドの引数として渡したパラメータを書き換えないというのが基本
コピーして渡さないといけないメソッドとして作られてしまってるのが問題で、更新日時とか何かしらの書き換えがあるならその結果を別途返すべき

メソッドのパラメータとして全データを渡すよりそのメソッドが使う必要最低限のものにしといた方がわかりやすい
まあ、条件にマッチしないデータは無視するという動作でも不自然じゃないからそんなに重要なことじゃないかな
0625デフォルトの名無しさん (アウアウクー MM21-HFg0)
垢版 |
2021/07/15(木) 18:33:23.51ID:YvGaZ0G0M
レスくれた人ありがとう
貰ったアドバイスを自分なりにもうちょい整理してみる

>>622
細かくなるけど必要なもの毎に処理を分けるってことだよね
自分みたいな素人目線だとこういうのは小さい処理が増えるのが煩雑に感じてやるのは躊躇するけど一個一個が独立してるしこの方が結果的に良さそう
0628デフォルトの名無しさん (ブーイモ MMde-uKKI)
垢版 |
2021/07/16(金) 10:50:53.05ID:5OijHeJ1M
AWS LambdaをC#で使ってる人おる?
DIの正しいやり方がわからん
ググると
FunctionクラスのデフォルトコンストラクタでServiceCollectionをインスタンス化して
Serviceを追加して解決してprivateフィールドに代入
的なコードは出てくるんだけど
なんか無理矢理感があってすごく気持ち悪い
ASP.NET CoreのControllerみたいにコンストラクタインジェクションしてくれればいいんだけどAWS LambdaのFunctionはそういうのないのかな
0629デフォルトの名無しさん (ブーイモ MMa1-3nkv)
垢版 |
2021/07/16(金) 12:25:27.67ID:Oq98um8EM
謎のランタイムが勝手にどっかで注入してくる方が気持ち悪いわ
Azure FunctionsなんかだとAzure側のランタイムがASP.NETと統合されてて注入できたりするけど、依存関係地獄になりがちでぶっちゃけ糞
Lambdaはその点余計なこと一切しないから単純明快で楽だ
そもそもLambdaごときにいちいちDIなんか要らんわ
FaaS使うんだったら差し替えはFunctionレベルでやるのが基本だよ
0630デフォルトの名無しさん (ブーイモ MMa1-3nkv)
垢版 |
2021/07/16(金) 12:44:52.48ID:Oq98um8EM
WindowsってPowerShell以前はコマンドラインシェルが貧弱だったから、開発者は伝統的に何でもかんでもアプリケーションコードの箱庭内でやってしまう傾向があって、
Azure Functionsの設計思想なんかもそういう箱庭コーディングの文化を引き継いでいるところがある
対してAWSは小物をシェルで組み合わせて使うUNIX的な文化の色が強くて、Lambda関数もコーディング環境というよりはあくまで「ちゃんと単独で機能する小さなコマンド」なの
その中でさらにドメイン切って差し替えられるようにして、みたいな発想はしないんだよ
0631628 (ブーイモ MMde-uKKI)
垢版 |
2021/07/16(金) 13:41:32.46ID:YjA+/kj2M
すまん自己解決したわ
AWSオフィシャルのLambda/ASP.NET Coreアダプタがあるらしい
まあそらそうだよなDIもまともに出来ないとかゴミサービスでしか使えんし
0633デフォルトの名無しさん (ワッチョイ 0154-x4cL)
垢版 |
2021/07/17(土) 04:37:12.67ID:SWDN49PP0
どうでもいいけど、状況判定に
if(HogeButton.Text == "あ" && !int.TryParse(HageButton.Text,out _))
みたいにコントロールのテキスト使いまくってるクラス見つけてしまった。

明日から犯人探しかな・・・
0634デフォルトの名無しさん (ブーイモ MMde-nkhS)
垢版 |
2021/07/17(土) 05:05:25.92ID:rQBsLn9RM
どうでもいいけど、状況判定に
if(HogeButton.Text == "ほ" && !int.TryParse(HageButton.Text,out _))
みたいにコントロールのテキスト使いまくってるクラス見つけてしまった。

明日から犯人探しかな・・・
0639デフォルトの名無しさん (エムゾネ FFfa-E0YB)
垢版 |
2021/07/17(土) 15:01:08.33ID:eTC1af8gF
Σはforだが(といってもΣの方が遥かに高速な訳だが)
∫はforではない
0642デフォルトの名無しさん (エムゾネ FFfa-E0YB)
垢版 |
2021/07/17(土) 16:04:35.47ID:eTC1af8gF
forの解釈として毎回実行時計算する言語ならそうだが
forでもコンパイル時にΣやΠが解析的に完了してる言語があっても良いだろう
C#スレだからどうでも良いけど
0645デフォルトの名無しさん (アウアウウー Sa39-E0YB)
垢版 |
2021/07/17(土) 18:51:59.16ID:6qmea//qa
いやいや、解析的っていうのは数値計算の対義語みたいなもので「数学的に解く」
みたいなニュアンスだと思うから数学屋さんはあまり使わないと思うよ知らんけど。

情報屋の言い回しだと思うよ。
俺は大学のアルゴリズムの講義でニュートン法とかやった時に聞いたのが最初の気がする
先生はもちろん情報工学の先生だ
0650デフォルトの名無しさん (ワッチョイ b101-E0YB)
垢版 |
2021/07/18(日) 13:09:02.92ID:RVrShVdw0
ビジネスが破綻する大半の原因は、 ”ビジネスを始める人の大半が、真の意味での
「起業家」ではなく、 起業したい、という熱に浮かれた「職人」として働いているに過ぎない。”
という事実にあります。
「職人」によって運営されているビジネスは、ビジネスが働くのではなく、彼ら自身が毎日働くこと
によって、成り立っています。
彼らは毎日、自分がやり方を知っている仕事を一生懸命にこなしていますが、「起業家」としての
視点が無いために、成長に限界が生まれます。
そして、生計を立てるために、彼ら自身がずっと働き続けないとならないのです。

誰もが必ず陥る罠
私が見ている限り、起業熱にうなされる人たちは、必ずと言ってもよいほど誤った
「仮定」を置いてしまうようだ。実は、のちに彼らが苦難の道を歩むことになるのは、
この、「仮定」が致命的に間違っているからなのである
致命的な仮定とは・・・「事業の中心となる専門的な能力があれば、事業を経営する能力は
十分に備わっている」ということである
私がこの仮定を致命的だと書いたのは、この仮定が間違っているからにほかならない
事業の中で専門的な仕事をこなすことと、その能力を生かして事業を経営することは
全く別の問題である。高い専門能力を持つ人にとって、独立は他人の為に働くという苦痛から
解放されるということを意味していた。それにもかかわらず、前提となる「仮定」が致命的とも
いえるほど間違えているために、彼らは自由になるどころか、自分が始めた事業に苦しめ
られるようになってしまうのである
マイケルEガーバー「はじめの一歩を踏み出そう」P28~29
0654デフォルトの名無しさん (ワッチョイ 0154-x4cL)
垢版 |
2021/07/20(火) 06:41:50.36ID:oT6fq8l/0
SqlServerへの非同期クエリを、ORマッパー使わずにSqlConnectionとSqlCommandで送信したい場合、
Task.Run(() => sqlCommand.ExecuteReader())
と、
sqlCommand.ExecuteReaderAsync()
のどっちを使うのが理想ですか?
0655デフォルトの名無しさん (ワッチョイ 0d01-R8z5)
垢版 |
2021/07/20(火) 08:27:13.73ID:6lATwKKz0
Asyncついたメソッドをawaitしたまへ
0659654 (ワッチョイ 0154-x4cL)
垢版 |
2021/07/20(火) 14:12:48.00ID:oT6fq8l/0
ありがとうございます。
普通に考えたら後者なのですが、フォームのLoadイベント時に上記処理を実行するようになっており、フォームLoad時にサーバーとの通信異常が発生していた場合、
前者の場合はフォームが応答する状態のまま、1〜2秒して例外をキャッチ出来ます。
後者の場合はフォームが応答しなくなり、1〜2秒して例外をキャッチ出来ます。
それでちょっと悩んでましたが、後者にします。
0664デフォルトの名無しさん (ワッチョイ 0d01-E0YB)
垢版 |
2021/07/20(火) 19:34:56.43ID:SMoWJv7O0
WPFのバインディングについて質問です。
テキストボックスに読み取り専用プロパティをバインディングしたいのですが、
プロパティの値を変更してもテキストボックスに反映されません。
調べたら、プロパティの変更を通知するイベントが無いとだめとのことだったのですが、
setterなしでに通知イベントを実装する方法は無いでしょうか。

例:
public class ViewModel
{
public int ID { get; set; }
public string Name { get; set; }
public string NameSan { get => Name + "-san"; }
}

<TextBox Text="{Binding NameSan}" />
0666デフォルトの名無しさん (ワッチョイ 76a7-XiFW)
垢版 |
2021/07/20(火) 20:08:36.24ID:K5CNGksB0
wpfでバインドできないプロパティは
DependencyPropertyでないから
DependencyObjectを派生させる必要がある
→UserControlを作ってそこにDependencyPropertyを作成する

ってググったら出てきた
0667デフォルトの名無しさん (ワッチョイ 9d5f-Rh1M)
垢版 |
2021/07/20(火) 20:21:36.49ID:GzauUP740
XAML側でNameをバインディングしてコンバーターで-san付けるかなあ
0668デフォルトの名無しさん (ワッチョイ 462d-Io+N)
垢版 |
2021/07/20(火) 20:27:17.58ID:luEetGrO0
>>664
NameプロパティのSetterでまとめて通知すれば良い

private string _name;
public string Name
{
get => _name;
set
{
_name = value;
PropertyChanged?.Invoke( nameof( Name ) );
PropertyChanged?.Invoke( nameof( NameSan ) );
}
}
0669デフォルトの名無しさん (ワッチョイ 0d01-E0YB)
垢版 |
2021/07/20(火) 20:35:19.09ID:SMoWJv7O0
>>664です。
沢山の回答レスありがとうございます。
例として記入したものが不適切でしたので、訂正させてください。
実際はNamesanのgetterには別クラスから値を取得するメソッドが実装されており、
NameやIDはNamesanでは使用しないものになります。

public class ViewModel
{
 public string NameSan
 {
 get
 { //別クラスから値を取得するメソッド}

なので、>>668様にご教示頂いた方法は使用できない形になります。
0670デフォルトの名無しさん (ワッチョイ 462d-Io+N)
垢版 |
2021/07/20(火) 21:00:19.75ID:luEetGrO0
>>669
外のクラスだろうがやることは変わらない
外のクラスからNameSanプロパティの内容が変わるタイミングで同じように通知する
外のクラスを変更するのが出来なければタイマーで通知を出すなんて荒業も思い付いたけどいまいち
0671デフォルトの名無しさん (ワッチョイ 0d01-E0YB)
垢版 |
2021/07/20(火) 21:07:59.62ID:SMoWJv7O0
>>670
>外のクラスからNameSanプロパティの内容が変わるタイミングで同じように通知する
ありがとうございます。外のクラスから通知させることができるのですね。
早速試してみたいと思います。

教えてくれた皆様、ありがとうございました。
0672デフォルトの名無しさん (ワッチョイ 9d5f-Rh1M)
垢版 |
2021/07/20(火) 21:11:28.67ID:GzauUP740
なんでパターン崩してイレギュラーなことしようとするんだろ
0673デフォルトの名無しさん (ワッチョイ 462d-Io+N)
垢版 |
2021/07/20(火) 21:45:11.17ID:luEetGrO0
>>670
ちょっと訂正。忘れてた。
クラスの外からイベントを直接発生させられないから、ViewModelクラスに変更通知イベントを
発生させるメソッドを実装して、外のクラスからはそのメソッドを呼び出す必要がある。

public Class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void FirePropetyChangedEvent()
{
PropertyChanged?.Invoke( nameof( NamaSan ) );
}
}
0675デフォルトの名無しさん (ワッチョイ 052f-NvNM)
垢版 |
2021/07/21(水) 21:46:25.70ID:Ra0jV4kr0
その外のクラスの変更通知を受け取って、自身の変更通知をだせばいいんじゃないのか
なぜわざわざ外のクラスが別クラスのメソッド呼ぶんだ?依存関係がおかしいだろ
0677デフォルトの名無しさん (ワッチョイ 1a01-DrjK)
垢版 |
2021/07/22(木) 11:03:00.91ID:cBUwSw0B0
>>675
だね

Modelの値が変更されたらViewModelの値も変更してUIも更新したいってことだから
ViewModelでModelの変更通知をsubscribeしてsetter経由でPropertyChangedイベントを発生させてUIを更新すればいい
値の更新が必要にもかかわらず読み取り専用プロパティにする意味がよくわからない
0681デフォルトの名無しさん (ワッチョイ fa2c-NvNM)
垢版 |
2021/07/22(木) 17:41:00.24ID:ViOG2+oF0
適当にはこんな感じでしょ
model.PropertyChanged += (sender, e) => {
if (e.PropertyName == nameof(model.Hoge)) {
this.OnPropertyChanged(nameof(this.Piyo));
}
};

public string Piyo => $"OK {this.model.Hoge}";
0684デフォルトの名無しさん (ワッチョイ 695f-uCgs)
垢版 |
2021/07/23(金) 21:15:00.87ID:ETT9THzl0
PropertyChangedという言葉の意味を考えてみろ
setterにあるのが自然だろ
おまじないだよ考えなくていい
0686デフォルトの名無しさん (ブーイモ MM4d-A0XN)
垢版 |
2021/07/23(金) 23:08:52.13ID:c4wX/KeRM
>>684
よく勘違いしてる人いるけど、イベントの-edは過去分詞じゃなくて動詞の過去形
つまりプロパティが他者によって変更されたのではなくプロパティが主体なので、
setterによらず自発的に変更イベントを発生させたとしてもなんら不自然ではない
0687デフォルトの名無しさん (アウアウウー Sa5d-Hgw+)
垢版 |
2021/07/24(土) 00:23:31.06ID:h1SwVBD3a
イベントが過去形か受動態かについては議論があるよ
全部過去形だというのは明らかに無理があるw
どっちの場合もあると思うしそれでいいでしょ。

受動態>過去形>完了形

一般的な使用頻度はこうじゃないかな。
しばらく前からイベントに普通の名詞形を使う命名の仕方もあるよね
0694デフォルトの名無しさん (ワッチョイ 695f-qCnf)
垢版 |
2021/07/24(土) 02:04:43.55ID:hjQXc5u90
何したいのかよくわからんけど
getterしか必要ないってことはそもそも画面に表示する必要ないプロパティじゃないの
0696デフォルトの名無しさん (アウアウウー Sa5d-Hgw+)
垢版 |
2021/07/24(土) 02:31:41.54ID:h1SwVBD3a
>>691
何を言っているのか意味がわかんないけど、自動詞って言葉の意味は分かる?
dropしたのはDroppedDownイベントを発生させるオブジェクトではないよね?
イベントを発生させるオブジェクトはdropしたんじゃなくて「された」んだよw

もちろん「何かが落ちた」という現象を通知するイベントなんだと強弁することもできるが、
これ言ってて苦しいでしょ(笑)不自然で無理矢理すぎる。
受動態だって考える方が100倍自然だ。

Clickedイベントとかも同じ。
これが過去形ならButtonが自分で自分をクリックしたのかとw
お前はクリックしたんじゃなくてされたんだろうがとw
0699デフォルトの名無しさん (ワッチョイ 59ad-isbc)
垢版 |
2021/07/24(土) 09:11:25.75ID:5I2AJlas0
>>696
自動詞わかるよ?

なんで自制を使うかって理由が抜けてるんだと思う。
ネイティブにとってもそこはMSの方針いけてねえよなって思うところかもしれんのだと思うんだけど、MSはBeforeClickとAfterClickとかそういう接頭語を使ってイベント発火順を表して欲しくないんよ。
なので、Clickのあとに起こるイベントはClickedなんよ。
Click→Clicking→Clickedになる。
0701デフォルトの名無しさん (ワッチョイ 2b7c-rYQD)
垢版 |
2021/07/24(土) 10:12:44.82ID:mVGUTLQy0
>>694
ViewModelでの話に限って言うと
setterを持っているってことはViewから入力があるという含意がある
(もちろんケースバイケースでそうでない設計にすることもある)

で、例えばViewのラベルで現在時刻表示するためにViewModelにNowTimeプロパティを用意したとして
Viewからの入力はないんだからsetterを用意するのはおかしいよね、ということ
0704デフォルトの名無しさん (ワッチョイ 9301-416K)
垢版 |
2021/07/24(土) 12:40:41.42ID:qEX1axDl0
>>701
>setterを持っているってことはViewから入力があるという含意がある

ないよ
外部から呼ばれたくなければprivate/protectedなsetterを使う

現在時刻のような呼び出しのたびに変化するような値は一般的にプロパティにすべきじゃないよ
(DateTime.Nowとかあるけど、あれはMSも間違いだと思ってるらしい)
0705デフォルトの名無しさん (ワッチョイ 2b7c-rYQD)
垢版 |
2021/07/24(土) 12:42:42.49ID:mVGUTLQy0
別にそれでもいいんだけど
現在時刻そのものはDateTime.Nowでとるじゃん(これがModelに相当する)
わざわざViewModelにDateTimeのフィールド置いたりとかする必要がない
ViewModelは単にDateTime.Nowを返すgetterを持つだけで充分
setter書いても実際には何もsetしないとか違和感バリバリだし
0708デフォルトの名無しさん (ワッチョイ fb62-xnNM)
垢版 |
2021/07/24(土) 13:23:10.38ID:rh7fcU6F0
>>705
それでもいいじゃなくて、どうクラスを設計するか
取得した時点でモデルプロパティ値が更新されたと見なす仕様なのか、リアルタイムで更新する仕様なのか
単に現在時刻をとれればいいのであれば、それはプロパティじゃなくてメソッドだし、プロパティ変更イベントを用意する必要もない
0709デフォルトの名無しさん (テテンテンテン MMeb-BZqs)
垢版 |
2021/07/24(土) 13:39:01.39ID:1RH6PTqTM
DateTime.Nowは設計失敗の産物って話、俺もどこかで読んだ記憶があったんだけど
おおもとのソースは書籍だったみたいだ
ググったら個人ブログの感想でこんなのが引っかかった
https://ufcpp.wordpress.com/2009/12/27/net-%e3%81%ae%e3%82%af%e3%83%a9%e3%82%b9%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa%e8%a8%ad%e8%a8%88/
0710デフォルトの名無しさん (オイコラミネオ MM55-3Z6B)
垢版 |
2021/07/24(土) 13:48:21.00ID:8X55Gw1wM
海外のクソライブライブラリ使うとたまにそういうレベルでメソッドになったりプロパティになったり
非常に邪魔くさい

DateTime.NowがDateTime.Now()になったりDateTime.GetNow()になったりDateTime.GetInstance.Nowになったり
コロコロコロコロ変えてくる

ドキュメントが整備されてないからインテリセンスで推測して変更するしかない
0712デフォルトの名無しさん (ワッチョイ 695f-MYQi)
垢版 |
2021/07/24(土) 19:53:22.67ID:hjQXc5u90
>>701
その含意はない
XAMLのModeプロパティでOneWayとか指定するようになってるし
0714デフォルトの名無しさん (ワッチョイ 41e4-j2WC)
垢版 |
2021/07/25(日) 17:48:33.79ID:jAuNvB3l0
アドバイスを頂きたいです。
簡単なCRUD機能を持ったコンソールアプリがあり、EntityFrameworkを使用してSQL Serverとのやり取りを行っています。
このSQL Serverのデータベースを年毎に個々に持ちたいという要件が出てきました。
テーブル構成等は全く同じで2020年のデータベース、2021年のデータベースをそれぞれ立てるという形です。

ただ、毎年この作業の対応は出来ないので、コマンドを叩くだけのような自動化をしたいと考えております。
理由として社内の事情によりvisual studioを使用する事が難しい点があります。
その為、アプリ側でDBとの接続情報を変更して発行しなおす事がハードルが高いため、可能であれば自動化したいです。

データベースの作成はSQL文を使用すれば良いと思うのですが、EntityFrameworkを使用しているアプリ側への対応として、「接続するデータベースが変更された場合」という部分はどのように対応してよいか分かりません…。

CodeFirst、ModelFirstどちらの場合でもデータベースの変更に対応するにはやはりプログラム側で変更するしかないでしょうか?
データベースを年毎に分けた場合、過去のデータを参照したい時に年毎のデータベースそれぞれのDbContextの情報を作成しないと行けないと考えるとやはり自動化は無理でしょうか…

当方素人レベルなので良い案も浮かばず、何か少しでもアドバイス頂きたいです…。
長文大変失礼しました。
0716デフォルトの名無しさん (ワッチョイ 41e4-j2WC)
垢版 |
2021/07/25(日) 18:11:58.13ID:jAuNvB3l0
>>715
ありがとうございます。
通常使用するのは「hoge」固定とし、年が変わるごとに「hoge2020」「hoge2021」のように名前を付けて別物として扱うということですよね。

私もこれなら行けるかもと考えていたのですが、例えば過去のデータを参照したい場合に「hoge2020」「hoge2021」の情報をアプリ側が所持していないので参照出来ないのでは…と思い悩んでいました…。(先程コンソールアプリと記述してしまいました、すみません。正しくはフォームアプリです)
0717デフォルトの名無しさん (ワッチョイ fbda-Th4Q)
垢版 |
2021/07/25(日) 18:27:49.79ID:AwazG5ML0
変更した情報をhogeのテーブルに持ち、クライアントへ渡しては?

hogeのConnStrInfoテーブル

ID, db_name, year
1, hoge_2018, 2018
2, hoge_2019, 2019
3, hoge_2020, 2020

これをクライアント側で取得し、動的に接続先を切り替える。
efだとConnection Stringをこねくり回すのはめんどいかもしれないけど
他に方法が思い浮かばない。
0719デフォルトの名無しさん (ワッチョイ 41e4-j2WC)
垢版 |
2021/07/25(日) 19:28:19.50ID:jAuNvB3l0
>>717
ありがとうございます。
こんな方法思いつきませんでした。
知識が乏しいので、私にはかなり難しそうですがプログラム側で変更出来ないならDB側で工夫するしかないですね。

>>718
アプリはEntityFrameworkを使用し、既存のデータベースからモデルを構築しています。
年毎にデータベースが増えたとしてもvisual studioの機能を使用し、データベースの構造をモデル化すれば良いのですが、諸事情によりvisual studioの利用が難しい環境ですのでプログラム側を変更しなくて済むような別の方法を探しています…。
回答になってなかったら申し訳ありません…。
0722デフォルトの名無しさん (ワッチョイ f154-AKU+)
垢版 |
2021/07/26(月) 03:31:43.27ID:2hg/H2MX0
新しいテーブルに既存のテーブルから正規化しつつ移行ってパターンで1回地獄見たな。
該当の既存のテーブルを、協力会社の古い基幹システムが使ってて、そっちが動かなくなった。
0723デフォルトの名無しさん (ワッチョイ b92f-MYQi)
垢版 |
2021/07/26(月) 09:47:45.98ID:jSxCL2fC0
普通に作ってればDBの接続情報をプログラム内に固定でもってることなんてないと思うが

つか年度ごとに別DB作るとかそもそもの発想がもう普通じゃないかw
0726デフォルトの名無しさん (ブーイモ MMeb-A0XN)
垢版 |
2021/07/26(月) 11:11:01.52ID:oZRLaCWQM
年度毎にデータを残しておいていつでも出せるようにしてほしいみたいな客の言葉を
常識的なシステム設計を理解していないバカが鵜呑みにしちゃった結果だろ
ギョウムシステムにはよくあること
0727デフォルトの名無しさん (ワッチョイ 9301-416K)
垢版 |
2021/07/26(月) 11:54:28.60ID:JPK+qSgu0
市販の会計ソフトだと年次ごとデータベースを分ける作りにしてるのはよくある

旧年度のDBはそのままにして新年度だけDB構造を変更できたり
確定処理後は読み取り専用にするのをアプリ層じゃなくDB層でできたりと
メリットもあるので一概に否定される考え方でもないと思う
0732デフォルトの名無しさん (アウアウウー Sa5d-DFYI)
垢版 |
2021/07/26(月) 13:31:24.51ID:H5g87deEa
イベントソーシングなら過去のデータを全てそのまま維持しつつ年度ごと、それどころかあらゆる変化に対応可能
アペンドオンリーなので過去データは最初から読み取り専用
年度ごとにデータベースを分けるなんて間抜けなことはしなくていい
0733デフォルトの名無しさん (ワッチョイ 9301-416K)
垢版 |
2021/07/26(月) 14:32:10.50ID:JPK+qSgu0
スキーマ変更に対して取りうる戦略ってのはイベントソーシングでも基本的に同じ

読み取り専用にする話はイベントソーシングで言うと
確定処理後に過年度のイベントが入ってこないようにしたり
入ってきてもプロジェクション時に必ず除外するようなアプリを通す必要がある

アプリ層で処理するって意味では年度別にデータベースを分けずに各データに年度をもたせた場合と同じ
0735デフォルトの名無しさん (アウアウウー Sa5d-DFYI)
垢版 |
2021/07/26(月) 15:51:35.56ID:H5g87deEa
>>733
>スキーマ変更に対して取りうる戦略ってのはイベントソーシングでも基本的に同じ
わからない
RDBではデータモデルの変更が発生すればスキーマを変更する
イベントソーシングはデータモデルの変更が発生してもアプリケーションを変更するだけ
つまりイベントの再生方法が変わるだけでデータレイヤは永遠に同じ

>読み取り専用にする話はイベントソーシングで言うと
>確定処理後に過年度のイベントが入ってこないようにしたり
>入ってきてもプロジェクション時に必ず除外するようなアプリを通す必要がある
イベントソーシングでは過去の状態を再生するにはタイムスタンプでフィルタするだけ
過年度の変更イベントが入っても過去の状態の再生には影響しない

>アプリ層で処理するって意味では年度別にデータベースを分けずに各データに年度をもたせた場合と同じ
単にタイムスタンプでフィルタするだけなのでアプリ層の仕事は存在しない
0739デフォルトの名無しさん (ブーイモ MMcb-A0XN)
垢版 |
2021/07/26(月) 16:55:34.22ID:GiNSwnizM
>データレイヤは永遠に同じ
イベントソーシングでは後からのスキーマ変更はすなわち意識高い系アーキテクトにとっては屈辱的な設計の破綻なので、
そうならないように属性を全部JSON型の列に突っ込むような緩いスキーマを採用する場合があるってだけだ
引き換えに失うものはC#プログラマならよく理解してるだろう
もちろんちゃんと型を付けて真面目にDBを使う選択もあって、その場合はよくある普通の取引記録テーブルと変わらん
スキーマvsスキーマレスの違いであり、イベントソーシングとは直接関係ないよ
0741デフォルトの名無しさん (アウアウウー Sa5d-DFYI)
垢版 |
2021/07/26(月) 17:03:55.87ID:H5g87deEa
>>739
ビジネス要件は日々変化するのでスキーマ変更を屈辱と感じるのは古臭い考え方のおじさん達だけだよ
変化に柔軟に適応するために最適化した進化と考えればいい
なおデータレイヤがスキーマレスだからといってモデルがタイプレスになるわけではないことは知っておいたほうがいい
C#や類似の言語が持つ静的型の堅牢性はESでも依然として完全に発揮されるので安心していいよ
0742デフォルトの名無しさん (ブーイモ MMcb-A0XN)
垢版 |
2021/07/26(月) 17:12:24.77ID:GiNSwnizM
そうかなあ
スキーマレスだとせっかくのnull許容参照型もあまり役に立たなくなるし、
おかしなデータが混入しててデシリアライズ時に型違いで落ちるとか日常茶飯事だったよ
マイグレーションによる停止が許容できるなら断然スキーマがある方が楽よ
0743デフォルトの名無しさん (アウアウウー Sa5d-DFYI)
垢版 |
2021/07/26(月) 17:23:29.78ID:H5g87deEa
>>742
さっきも言ったようにESでモデルの静的な型安全性が損なわれることはない
notnull/nullableは依然として有効だよ
再生時に型違いで落ちるのが日常茶飯事というのは何を言ってるのかわからないね
0744デフォルトの名無しさん (アウアウクー MM05-j2WC)
垢版 |
2021/07/28(水) 15:11:51.63ID:DWczQTyVM
初歩的な質問でごめん
EntityFrameworkで2つのテーブルをjoinするやり方を調べてると下のコードみたいに結合した結果を作るように書いてたのね

(book, category) => new{
Title = book.Title,
Category = category.Name,
PublishedYear = book.PublishedYear
}

もしbookテーブル、categoryテーブルが例えば100列ずつあって結合後に全要素取得したい場合はnew以降に全カラム分記述しなきゃいけない?
0746デフォルトの名無しさん (ワッチョイ fbda-Th4Q)
垢版 |
2021/07/28(水) 17:28:01.17ID:2UB5YNTT0
var q = db.Books.Join( db.Categories, o => o.id, i => i.id, ( o, i ) => new { Book = o, Category = i } );
foreach(var row in q)
{
 int bookId = row.Book.id;
 int categoryId = row.Category.id;
 :
 :
}

まぁ不要なカラムを含んでいる分、使用メモリも増えるが。
生産性優先なら上記のように書くことも多々あり
0747デフォルトの名無しさん (ワッチョイ 41e4-j2WC)
垢版 |
2021/07/28(水) 19:36:49.49ID:DIkQ/nRv0
>>746
ありがとう
確認だけど、この部分で全要素をqに格納が出来て

var q = db.Books.Join( db.Categories, o => o.id, i => i.id, ( o, i ) => new { Book = o, Category = i } );

欲しい要素がある場合は後から個別に参照するって感じだよね

foreach(var row in q)
{
 int bookId = row.Book.id;
 int categoryId = row.Category.id;
 :
 :
}

LINQ難しい…
0749デフォルトの名無しさん (ワッチョイ fbda-Th4Q)
垢版 |
2021/07/28(水) 20:37:20.88ID:2UB5YNTT0
>>747
そう。
Linq文は横に長くなりがちなので、一時変数は極力短くすることが多いのも難しく感じる要因かな。
やってるのはただのinner join

もうちょっと丁寧に書くと
using(var db = new HogeContext() )
{
 // 欲しい情報
 string bookName;
 int bookPrice;
 string categoryName;

 // クエリ生成
 var query = db.Books.Join( db.Categories, outer => outer.category_id, inner => inner.id, ( outer, inner ) => new { Book = outer, Category = inner } );

 // 実際のDB接続とクエリ実行はforeach文に到達したとき
 foreach(var row in query)
 {
  bookName = row.Book.name;
  bookPrice = row.Book.price;
  categoryName = row.Category.name;
  :
  :
 }
}

情報取得だけならAsNoTracking()つけたりするから、さらに横に長くなる。
0753デフォルトの名無しさん (アウアウクー MM05-j2WC)
垢版 |
2021/07/29(木) 12:18:33.25ID:wBFFQVArM
>>749
分かりやすくて助かるありがとう

EFで取得した値がnullかどうかをチェックってどうしてるの?
生のSQL書くやり方だと取得した取得したDataReaderをループで回して

while(reader.Read() )
{
for(var i = 0; i <= 10; i++)
{
if(Convert.IsDBNull(reader[i])))
{
testList[i] = 0;
}
else testList[i] = reader[i]
}
}
↑みたいにチェックしてnullだったら0埋めとかやりたい処理を書くんだろうけど、EFで取得した値だと上で教えてくれたように

foreach(var row in query)
 {
  bookName = row.Book.name;
  bookPrice = row.Book.price;
  categoryName = row.Category.name;
 }
ループで回してもrow.Book.nameみたいに個別にアクセスしないといけないからnullのチェックはそれぞれの要素に対してするの?
わかりにくくてごめん
0754デフォルトの名無しさん (ブーイモ MM4d-WLdd)
垢版 |
2021/07/29(木) 12:47:21.43ID:qHkX3Ch7M
WPFでcanvasに図形が追加されるたびにその状態を保存してUndoRedo機能を作りたいです
stack<t>にcanvasを入れれば実装できると考えていたのですが出来ませんでした
stackの中身を見てみるとcanvasが全て最新のものになっていました
理想
@図形追加
→stack1 canvas(図形一個だけ)
A図形追加
→stack1 canvas(図形一個だけ)
→stack2 canvas(図形2個)
B図形追加
→stack1 canvas(図形一個だけ)
→stack2 canvas(図形2個)
→stack3 canvas(図形3個)
実際
@図形追加
→stack1 canvas(図形一個だけ)
A図形追加
→stack1 canvas(図形2個)
→stack2 canvas(図形2個)
B図形追加
→stack1 canvas(図形3個)
→stack2 canvas(図形3個)
→stack3 canvas(図形3個)

this.canvasをstackにpopで格納しているのですが恐らく参照型になっている(?)のかと思います
どうすれば解消されるか教えてください
0755デフォルトの名無しさん (ワッチョイ fb62-xnNM)
垢版 |
2021/07/29(木) 13:19:29.67ID:A3ai3bJf0
>>754
stack2を作る時に、
var stack2 = stack1;とすると同じインスタンスを参照するのでstack1の追加が反映される
var stack2 = new stack(stack1);とすると別のインスタンスを参照するので反映されなくなる

という話であってるよね
0758>>754です (ワッチョイ 1a36-SEfg)
垢版 |
2021/07/30(金) 00:50:25.37ID:t+gnevWm0
stackのインスタンスは1個だけです

Stack<Canvas> stack = new Stack<Canvas>();で宣言して
@canvasに図形追加後にstack.Pop(canvas)
→stackの中身1個目(図形一個だけ))
Acanvasに図形追加後にstack.Pop(canvas)
→stackの中身1個目(図形一個だけ)
→stackの中身2個目(図形2個)
Bcanvasに図形追加後にstack.Pop(canvas)
→stackの中身1(図形一個だけ)
→stackの中身2(図形2個)
→stackの中身3(図形3個)

少し書き直しました
これが実現したことです
0763デフォルトの名無しさん (ワッチョイ 4eda-NYJC)
垢版 |
2021/07/30(金) 11:05:04.49ID:QEEDdLaI0
それは参照のコピーなので、stackに入ってる実体は全部一緒になる

stack.Push(this.canvas);
this.canvas=new Canvas();;

とやって新しい実体を作って、この上に図形を置いていく
0764デフォルトの名無しさん (ワッチョイ 4abd-Gq/8)
垢版 |
2021/07/31(土) 22:58:59.84ID:Z1UuiVog0
添付図のような必ず始点Xが0からなる四角の座標List配列の重複部をチェックして配列を作り直したいんですけど、考え方がさっぱりなので教えて下さい。

@原点XYは四角の左下を押さえ、加工はXは右。Yは上への数値とし、マイナス数字はなしです。

(原点X) / (原点Y) / (加工X) / (加工Y)
・変更前
[0] 0 / 15 / 30 / 10
[1] 0 / 40 / 10 / 120
[2] 0 / 60 / 30 / 30
[3] 0 / 110 / 30 / 30

・変更後
[0] 0 / 15 / 30 / 10
[1] 0 / 40 / 10 / 60
[2] 0 / 60 / 30 / 30
[3] 0 / 90 / 10 / 20
[4] 0 / 110 / 30 / 30
0772デフォルトの名無しさん (ワッチョイ d6a7-8s23)
垢版 |
2021/08/01(日) 08:17:39.94ID:bK0+MnNI0
>>764
・加工XYって何?
・変更前、変更後って何?
・表の[番号]は何?
・表の一行は何を表してるの?
・作り直したいって具体的にどうするの?
・そもそも重複部をどうしたいの?
0773デフォルトの名無しさん (ワッチョイ d6a7-8s23)
垢版 |
2021/08/01(日) 08:57:03.12ID:bK0+MnNI0
>>771
図だけ見るなら
Xの値が同じ領域のYの範囲を作成する
だけじゃね?

@重複なしのY範囲リストを作成する(矩形のor取ればできるはず)
A開始Y座標のXの最大値を求める
B元の矩形情報からAのY範囲を求める
Cリストに追加
DABCで次のY範囲を求める
以下ループ

みたいな
0774デフォルトの名無しさん (ワッチョイ 7a01-72oH)
垢版 |
2021/08/01(日) 09:14:55.78ID:WqiJzLKM0
>>764
パズルみたいでなんとなく考えてみたんだけどこういうことか

https://i.imgur.com/HHY6VFU.png

これが 変更前の四角形[0] の 「座標」とやらの考え方かな

んで[0]〜[3]の矩形が重なり合う部分を消去
残る矩形の「座標」を求める

変更前[1]の横幅がもっと広かったりするときれいに四角形が作れないけど
そういう場合は存在しないのかな
それとも別のルールで 「変更後」 の四角形をつくるのかな
0783デフォルトの名無しさん (ワッチョイ 7a01-72oH)
垢版 |
2021/08/01(日) 12:55:16.92ID:WqiJzLKM0
Y軸を底辺とみなしてX軸側に伸びる棒グラフのようなものと捉えて処理したら一応できた
Y軸で使う最大の値160を要素数とする配列を作る
棒グラフの高さ、つまり加工Xを要素として入れていく
んで、この配列を材料にしていろいろと・・・

ただ、変更前配列の、例えば [0] 0 / 15 / 30 / 10 の 10を1に変えるとまだエラー出ちゃうわ
つまらんところでつまづく
時間ないのでやめたー
0786デフォルトの名無しさん (ワッチョイ f15f-TPha)
垢版 |
2021/08/01(日) 13:35:56.90ID:5QRFhKeu0
>>764 のような質問の仕方を見ると、人に物事を伝える能力や単語の選び方って凄い重要だと実感する
回答者にナゾナゾ出してるんじゃないんだから、加工とか原点という意味不明な単語を使わずに
「左下の座標」「幅」「高さ」
で良いじゃない
あとアップしてある図は右端の縦線がないけど、左(変更前)と右(変更後)で違うというのは質問に関係あるの?

四角の重なりをどうにかしたいなら
System.Windows.Rect(またはSystem.Drawing.Rectangle)として全て総当たりで
IntersectWithで重なり検出したら何かする
Containsで完全に含まれることを検出なら更に何かする、で良いんでない
0787デフォルトの名無しさん (アウアウウー Sa09-By/s)
垢版 |
2021/08/01(日) 13:39:33.75ID:8DB1DilKa
なるほどそういう質問だったのねw
これ数学的に厳密なアルゴリズムを考えるのはきつそうだね。

与えられる座標が整数であり上限が確定している(例えば200)なら、
ファミコン時代のテレビゲームのBG面みたいに200×200のタイルでできた盤面上で
考えるのが簡単そうかな知らんけど
0790デフォルトの名無しさん (アウアウウー Sa09-By/s)
垢版 |
2021/08/01(日) 14:44:59.53ID:8DB1DilKa
図形の交差関係は目で見たら一目瞭然だけどそれを排他的な長方形に分解する処理が
そんなに簡単とは思えんな

特に抜き出した排他的な長方形をその後どう扱うかが難しい。
0792デフォルトの名無しさん (ワッチョイ 7a01-72oH)
垢版 |
2021/08/01(日) 15:01:47.46ID:WqiJzLKM0
気になって完成させちゃった

・変更前
[0] 0 / 15 / 30 / 10
[1] 0 / 40 / 10 / 120
[2] 0 / 60 / 30 / 30
[3] 0 / 110 / 30 / 30

もし[1]が↑じゃなくて↓だったら

・変更前
[0] 0 / 15 / 30 / 10
[1] 0 / 40 / 100 / 120
[2] 0 / 60 / 30 / 30
[3] 0 / 110 / 30 / 30


結果が
[0] 0 / 15 / 30 / 10
[1] 0 / 40 / 100 / 120

となるようなロジックで書いた
0795デフォルトの名無しさん (ワッチョイ 7a01-72oH)
垢版 |
2021/08/01(日) 15:22:41.39ID:WqiJzLKM0
結果見て思ったんだけど、
>>764に例示してある数値だと変更後に6個の矩形が出てこない?
これ、俺の結果↓

[0] 0 / 15 / 30 / 10
[1] 0 / 40 / 10 / 20
[2] 0 / 60 / 30 / 30
[3] 0 / 90 / 10 / 20
[4] 0 / 110 / 30 / 30
[5] 0 / 140 / 10 / 20

なんかおれ間違えてるのかな
0796デフォルトの名無しさん (アウアウウー Sa09-UXpz)
垢版 |
2021/08/01(日) 15:26:08.45ID:l/JPeXRia
問題文を素直に解釈するなら何個でもいい筈だろ
極端な話、長さ1の正方形に分割して重複を排除するだけでも条件は満たしてる
答えを1つに収束させたいならもっと強い条件が必要
0798デフォルトの名無しさん (スフッ Sd9a-OhyW)
垢版 |
2021/08/01(日) 15:42:24.01ID:vyyPv1W2d
たとえば加工x値が同じ図形は存在するのか?
存在するならそれらが重なってる場合は結合するのか分離するのか?
分離するならその規則は

加工xが同じ矩形が連続して出力されたらそれらを結合するのかしないのか

>>771はあっさり書いてるが他の未知の情報がありそう
0800デフォルトの名無しさん (ワッチョイ d52f-QEAr)
垢版 |
2021/08/01(日) 16:50:21.68ID:A8U13CEq0
>>795
もともと提示されている数字と図形があってないんじゃね
数字が正しいのなら、それが正解な気がするなぁ

つかもうC#全く関係ないし
どっかアルゴリズムなスレかプログラムのお題スレか行けばいいんじゃね
0805デフォルトの名無しさん (アウアウウー Sa09-By/s)
垢版 |
2021/08/01(日) 18:03:04.12ID:8DB1DilKa
>>804
だからそういう前提の宿題じゃないのと言ってるのよ

なぜなら実数前提だと単純なアリゴリズムで解けないから。
整数なら与えられたデータを使ってタイルにお絵かきして、
完成した「ドット絵」を排他的な長方形に分解すればいい。

これならそんなに難しくない。
0810デフォルトの名無しさん (ワッチョイ 7a01-72oH)
垢版 |
2021/08/01(日) 19:03:30.86ID:WqiJzLKM0
あー実数たぶんいけるなぁ
配列の要素数=Y軸、中身=X軸でやったけど、
ゼロと正の整数に限定されちゃう要素数をつかうのやめて
Y値の境目になる値とXの値をペアにしてデータ処理すればいけるわ


>>809
そういうもんかねー
0813デフォルトの名無しさん (ワッチョイ 4abd-Gq/8)
垢版 |
2021/08/01(日) 21:20:54.61ID:eXU4IEL10
説明、単語等々もろもろすみません。
宿題でもなんでもなく、私用のものです。

Xは0限定。数値は少数。Xが0以上で同じ場合は分解せず、合体して一つなどなどいろいろありますが、くれたレスを読みもう少し考えてみます。

コード考えてくれた方々、レスくれた方々ありがとうございました。
0822デフォルトの名無しさん (アウアウウー Sa09-UXpz)
垢版 |
2021/08/02(月) 12:49:33.82ID:hlxsjNdya
>>816
うーん、まず数値は右寄せが基本ね。
あと小数点、スラッシュも揃えて。
申し訳ないんだけどこれエクセルに出力できない?
それと、変換の文字がボタンと比べて小さすぎ。
フォームタイトルはちゃんと付けようね。
え?ロジック?動けばいいんだよそんなもん。
あ、レビュー記録票、書いといてね。
0823デフォルトの名無しさん (ワッチョイ 7a01-72oH)
垢版 |
2021/08/02(月) 13:00:00.71ID:C1C7yhSJ0
(#^ω^)ピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキ
0827デフォルトの名無しさん (ワッチョイ 5d01-1vA1)
垢版 |
2021/08/03(火) 19:50:53.41ID:mfdlvppf0
そこまでやったならgithubにでも上げてソース共有してあげてw
0828デフォルトの名無しさん (ワッチョイ d5da-4J71)
垢版 |
2021/08/03(火) 21:59:52.15ID:dhOR9Bol0
思い付きだと、データをリストに積んで、0番目と1番目以後を順次比較、重複があったら分割してリストに入れる
それが終わったら1番めと2番目以後を比較、以下繰り返し
0829デフォルトの名無しさん (ワッチョイ ed5f-QEAr)
垢版 |
2021/08/04(水) 14:29:24.89ID:y7EJ5FVE0
ここまでひどいGUIを見たのは何年ぶりだろう
0831デフォルトの名無しさん (ワッチョイ 7a01-72oH)
垢版 |
2021/08/04(水) 17:56:55.20ID:lSduKT6J0
コードは汚くてお前らにコテンパンにこき下ろされるんで上げないけど、使ったロジックはこんな感じ

「変更後」の矩形はまるでY軸を底辺として、X軸方向に伸びる棒グラフのようだとイメージしてる
棒ひとつひとつの「高さ」が加工Xとなるわけなんだけど、これを求めるのに棒の「中間点」を使った
この方法を使うと、「変更前」矩形がどんな重複の仕方をしていても処理できる

詳細はpngで。ちょいでかいけど
https://i.imgur.com/iZGHuwg.png

ちなみに@でのY値は重複排除する

こういう図形絡みの問題って、視覚的には簡単そうなんだけど、
どんなイメージで捉えるにせよ、コードに書き起こせなきゃダメなんで
そこが難しくもあるし面白いところでもあるなぁ

もうC#な話題じゃないんですんません
0832デフォルトの名無しさん (アウアウウー Sa09-Ln56)
垢版 |
2021/08/04(水) 18:35:09.28ID:ZrYWCpLya
>>831
要は合成図形の「右側」を結んだ包絡線(じゃないけど)みたいなものを考えて、
その包絡線の「高さ」が変わらない区間を矩形として切り出すわけね。

確かに全部の長方形がY軸に張り付いてる前提ならこれでOKっぽいね。
0837デフォルトの名無しさん (ワッチョイ 0d73-mtqC)
垢版 |
2021/08/04(水) 21:11:51.99ID:pwD/1Ntx0
参照として使うんじゃ無く、実行時に
ファイルがあるかどうか確認しつつ読み込むってこと?
AssemblyとかのLoadfileとかをいってるんかな?

それともネイティブのdllの方かな?
LoadLibraly や GetProcAddressの話かな?
0838デフォルトの名無しさん (ワッチョイ cdb0-tWs3)
垢版 |
2021/08/04(水) 22:55:38.97ID:DnWwcKGy0
今、スレッド毎に初期化と後始末が必要なとあるライブラリを使用しています。
これを生のThreadで使う場合はThreadProcの先頭と終わりでそれぞれ初期化/終了処理を呼べばよいので問題ありません。
ここでThreadPoolを使いたい場合、ThreadPoolで管理されるスレッドの開始と終了時にそれぞれ初期化/終了処理をさせる
ようにしたいのですがそのような方法はないでしょうか。
0841デフォルトの名無しさん (ワッチョイ 9a8b-IKHw)
垢版 |
2021/08/05(木) 18:17:03.24ID:Uqt4t3UY0
C#+Selenium+ChromeDriverでブラウザ操縦をしています。

サイト上のリンクをクリックするとポップアップで
別な画面が起動します。
そのポップアップで開いたブラウザを操縦する事は可能でしょうか?
もしご存じでしたら解説サイトなどがあれば教えてください。

【やりたい事】
親サイトを起動→親サイト内のリンクをクリック→子画面がポップアップで起動
→子画面のデータを取得→子画面を閉じる→親画面を閉じる
0843デフォルトの名無しさん (アウアウウー Sa09-Ln56)
垢版 |
2021/08/05(木) 20:49:02.48ID:Olt1ICsqa
>>842
アンマネージドの関数呼び出し自体は一度基本を押さえれば
そこまで難しくもなければ奥が深い話でもないと思うので、そこに特化した本は
たぶんないんじゃない?

Win32 API自体の本はいっぱいあると思うけどC#とは関係ないね
0855デフォルトの名無しさん (ワッチョイ eb2f-e++8)
垢版 |
2021/08/07(土) 10:22:50.01ID:uyApmvLi0
switch(angle)
{
case > 180:

}

みたいに変数の値に対する不等号の条件で分岐させることってSwitchでできませんでしょうか?
おとなしくif文使った方がいいのでしょうか
0860デフォルトの名無しさん (アウアウウー Sa55-NW/4)
垢版 |
2021/08/07(土) 14:36:12.21ID:RtGgObiga
VBのSelect Caseは最初から何でもありだ

思えばCのswitchは何を狙った機能だったのかね。
直接機械語のジャンプテーブルに変換できるケースなんかほとんどないと思うのに
そのくせ制約だけ結構ある
0871デフォルトの名無しさん (アウアウウー Sa55-NW/4)
垢版 |
2021/08/08(日) 21:07:56.95ID:RKpEn974a
むしろいい歳こいて本気でサラダ油は延焼しないと思ってる人がいるのが驚き。

灯油は簡単に点火しない(だからポリ容器なんかで携帯できる)が、
「芯」で空気とまざる状態にしてやれば割と簡単に点火して燃焼が継続する。

サラダ油も基本的に同じ。
こぼしたサラダ油をキッチンペーパーで拭いたのを放置したら危険だよw
0876デフォルトの名無しさん (アウアウウー Sa55-NW/4)
垢版 |
2021/08/08(日) 22:17:48.77ID:RKpEn974a
>>873
この人も痛いねw
論点はそんなところにない。
サラダ油で人を火だるまにできるかだろう。
答えは言うまでもない。
その手の事故は時々報道されてるんだから。

どうでもいいけどサラダ油が燃えないと思ってる人は江戸時代まで行燈の燃料に
何を使ってたのか知らないのかw
0877デフォルトの名無しさん (ワッチョイ 3193-2NN+)
垢版 |
2021/08/08(日) 22:32:22.78ID:ukLoJDXq0
>>876
その事故が起きる程度の温度に短時間でできるかどうか考えた?
250℃まで温度が上げられるならそりゃ火だるまにもできるけど、
それができるなら灯油やガソリンならもっと早く火だるまになるって話
行灯の燃料で生身の人を燃やそうとしたソースあるなら是非教えてくれ
0878デフォルトの名無しさん (アウアウウー Sa55-NW/4)
垢版 |
2021/08/08(日) 22:37:41.78ID:RKpEn974a
>>877
考えた?(笑)
君こそ紙や綿や小麦粉の引火点が何度か考えたのかな?w

まあ理屈は後から考えて欲しいが、とりあえず
キッチンペーパーにサラダ油浸して風呂場で着火して
どうなるか観察してみw
0892デフォルトの名無しさん (アウアウウー Sa55-NW/4)
垢版 |
2021/08/09(月) 18:29:34.78ID:Mbw5cgYZa
頭が悪いのは簡単な実験で確認できることをやりもしないで
自分の思い込みに固執する人のことだと思うよw

キッチンペーパーとサラダオイルぐらい家にあるだろw
なぜ2分でできることをやろうとしない。

やってみりゃサラダオイルで人を火だるまにする狙いがそう荒唐無稽じゃないことぐらい
すぐ分かるだろうに。(理系出身ならそれぐらいやらなくても分かって欲しいけどw)

で、こういうのに限って「老害ガー」と口癖のように言ってたりする。(このスレにも時々いるねw)
自分自身の思考回路がまさに老害のそれであることの自覚すらないんでやんの。

あと、「問題」が再現可能と思われるコードを示しもせずに動きません動きません連呼してるタイプの人ね。
あれと同じだ。
0894デフォルトの名無しさん (ワッチョイ 3193-2NN+)
垢版 |
2021/08/09(月) 18:49:04.34ID:xB+uo/C+0
>>892
老害とか年齢を揶揄する発言が無いのにどうしたの
統失の気があるから心療内科に相談するべきだよ
キッチンペーパーにサラダ油浸して火を付けるのと、
撒いたサラダ油に火を付けるのが同じだと思ってるあたりFラン文系かな
0899デフォルトの名無しさん (ワッチョイ eb2f-e++8)
垢版 |
2021/08/09(月) 22:55:57.07ID:7Ui8gMyq0
フラグを立てるときの変数の型なのですが、2値のときでもboolじゃなくてstring使ってもいいですか?

bool announceRequired=true , false

より

bool announce='on' , 'off'

とした方がアナウンスするかしないかのフラグだよなってわかって、
可読性が高いと思うのですが。
0913デフォルトの名無しさん (アウアウウー Sa55-NW/4)
垢版 |
2021/08/11(水) 12:55:48.34ID:fq+aFcpEa
>>910
前に「自然数を継承して整数にする、という発想は根本的に間違っている」
って説明したと思うんだけどw

Weekdayを継承してDayOfWeekを作るっておかしいでしょw
DayOfWeekのサブセットとしてWeekdayを定義ならありかもしれんが
0916デフォルトの名無しさん (アウアウウー Sa55-NW/4)
垢版 |
2021/08/11(水) 18:34:39.09ID:fq+aFcpEa
本当にすごいしょうもない揚げ足取りだしかつスレ違いで恐縮なんだけど、
今時はあんまり「ステータス」って言葉は使わないと思うよ

理由はよく知らないし、たぶんその方が英語的に自然だからだと思うが、
英語でも日本語でもステートの方を使うことの方が多い。

これ偏見かもしれんけど、今還暦間近ぐらいの世代より上の人はよくステータスって言ってた気がする。
特に組み込み系とかの
0918デフォルトの名無しさん (ワッチョイ 3193-2NN+)
垢版 |
2021/08/11(水) 19:49:32.27ID:4bcO7mM80
>>916
ステートとステータスは別物だから今時とかそういう話じゃない
組み込みは時間に関わる状態が多いから自然とステータスが増える
時間に関係がなく、物体の状態であればステート
だからオブジェクトに対してはステートが増える
0923デフォルトの名無しさん (ワッチョイ 895f-7vv7)
垢版 |
2021/08/12(木) 16:01:23.37ID:L8R9VTGX0
visual studio 2019でnet core 5.0でプロジェクトを作りたいのですが
Windows フォームアプリケーション(.NET Framework)と
Windows フォームアプリケーションどっちを選べば良いのでしょうか?
0925デフォルトの名無しさん (ワッチョイ e173-ySHw)
垢版 |
2021/08/12(木) 18:39:29.28ID:gZthChm30
このへんも事情知ってる人はわかるが、新規の人にとってはカオスだわな。
Core と Coreなしと Framework
Core と CoreなしはCore の系列なのかとか。
.net から .net frameworkは参照できるのかどうかとか。
0927デフォルトの名無しさん (ワッチョイ 895f-7vv7)
垢版 |
2021/08/12(木) 19:42:27.81ID:L8R9VTGX0
後者のWindows フォームアプリケーションで作りました。
作成途中でnet core のバージョン選択する画面が出たのでこれで合ってるのか分かりませんがとりあえず進められました
0935デフォルトの名無しさん (スフッ Sd62-CCsc)
垢版 |
2021/08/14(土) 01:17:01.22ID:ZRC716d0d
Xamlだったら理屈で組めるからデザイナー抜きでも出来そうな気がする。
かといって、プロジェクトとかどうやって作るのか、調べるの面倒だし。
0939デフォルトの名無しさん (ワッチョイ e95f-sbZG)
垢版 |
2021/08/15(日) 16:02:52.85ID:5x/3KAJ70
VSのインストーラーでC#とVB.NETってなんでセットになってるんだろ
C#だけをインストールできない
0953デフォルトの名無しさん (ワッチョイ 8973-un53)
垢版 |
2021/08/15(日) 21:38:24.85ID:n3yCnAOj0
超複雑な型になるCOMと相性悪いからTypeScriptのメリットないのでは...
c#の方がまだCOMと型の自動マーシャル効いてるから相性いいでしょ。
0954デフォルトの名無しさん (アウアウウー Saa5-pBez)
垢版 |
2021/08/15(日) 22:09:47.17ID:rBaqdfAea
VB(.NETの方)のOption Strict Off相当の機能を導入しないと
C#をマクロに使うのきついだろうね。
エクセルしか知らんけど、

double[,] hoge = range.Value;

みたいに書けないからね。
エクセルは機能の性格上型安全性とは相性が悪い。
0957デフォルトの名無しさん (ブーイモ MM62-H+bG)
垢版 |
2021/08/16(月) 10:37:15.02ID:rx7L9F9WM
>>953
TypeScriptの型は後付けだからどうとでもなるんだよ
特定のプロパティの値に応じて型を変えるとか自由自在
オブジェクトの実体と必ず一致しなければならないC#の型とは違って、
TypeScriptの型というのはオブジェクトの実体とは無関係でTypeScriptでそれを扱うときの外形的な制約を記述したものにすぎないの
0958デフォルトの名無しさん (ブーイモ MM62-H+bG)
垢版 |
2021/08/16(月) 11:00:53.08ID:rx7L9F9WM
マーシャリングについて補足しとくと
例えばある変数xにRangeオブジェクトが入っていることを知っているとして、C#の型で扱おうとすればラッパー型で包んでやる必要がある
これってよく考えると無駄で、xがRange型であることは本来コンパイラとVSの静的アナライザだけが知っていればよくて、実行時に実際にラップ(マーシャリング)する必要は本来ない
つまり
dynamic<Range> x; //xはRange型のメンバを持つことが保証される
みたいなことができればよくて、これこそがTypeScriptの型なんだよ
0961デフォルトの名無しさん (ワッチョイ 49b0-jBWP)
垢版 |
2021/08/17(火) 08:45:03.71ID:G/OIjFk20
>>958
COMの場合は実際にQueryInterfaceしないとその型として使えないでしょ。
そこではTypeScriptの静的な型推論は用がない。
加えて、C#などではタイプライブラリからその定義情報を取得できるけど今のTypeScriptにはその機能はない。
まあOfficeに組み込むならその時に追加すればいいんだろうけど。
0963デフォルトの名無しさん (ワッチョイ 49b0-jBWP)
垢版 |
2021/08/17(火) 09:22:03.04ID:G/OIjFk20
だからその機能を追加する必要があると書いたわけだが。
そのうえで、タイプライブラリの型情報を使う前提ではTypeScriptの型推論が特に役立つわけではないということ。
0968デフォルトの名無しさん (ブーイモ MM85-H+bG)
垢版 |
2021/08/17(火) 12:02:31.57ID:Yv5efE47M
そもそもTypeScriptが使えるのってWeb版のOfficeだけだからCOMなんか無い
仮にTypeScriptでCOM経由でデスクトップ版の操作させるとしたら、dynamicと同じく普通にAutomation使えばいいだけだね
もちろん型定義も普通に書けばいいだけ
0975デフォルトの名無しさん (ワッチョイ e5b0-NTPF)
垢版 |
2021/08/18(水) 18:46:34.79ID:LMksndsA0
複数のダイアログで定義して、メソッド中でHttpClientで外部のAPIにアクセスするクラスがあります。
複数のメソッドがあるのですが、それぞれのメソッドの中でHttpClientをnewするのは
ダメだと言うのを今さら知り、修正をもくろんでいます。

そうなると、各ダイアログで宣言するのも良くないとか、ついでに外部に接続せずに
テスト出来るようにしたいとか、直したいところが増えてしまい、どこから手を出せば良いか
分からなくなってしまいました(全面的に直さなければいけないことは分かる)。

この手のクラスについて、わかりやすいサンプルコードがありましたら教えてください。
0977デフォルトの名無しさん (ワッチョイ 2ea7-5ops)
垢版 |
2021/08/18(水) 19:24:56.77ID:GqIaKxua0
あー、でも、扱いが厄介であるとわかってるクラスなら自分が使いやすいようにラップしちゃえば?
そうすれば後で

実はこのクラスこうやって使うんですよ(・∀・)ニヤニヤ

ってなったときにそこさえ直せば良くて
他のクラスにはそのクソな部分が伝播しないじゃん
0978デフォルトの名無しさん (ブーイモ MMb6-H+bG)
垢版 |
2021/08/18(水) 19:31:33.97ID:kXiitRhKM
>>975
ダイアログ開くときくらいなら毎回newで全く問題ないよ
使い回したほうがいいのは、ループ内で毎回newするとか、多数のユーザーが同時に利用するWebシステムでリクエスト毎にnewするとかのレベルの話
0979デフォルトの名無しさん (ワッチョイ 4924-cJil)
垢版 |
2021/08/19(木) 17:14:51.36ID:t0DU0NHa0
WinFormsのDataGridViewColumnのAutoSizeMode.Fillって一番隅じゃないと機能しないの?
ColumnHeader, Fill, ColumnHeaderって並べると一番右がColumnHeader無視されて押しつぶされるんだけど
0982デフォルトの名無しさん (ワッチョイ 9f24-T33Q)
垢版 |
2021/08/20(金) 09:19:57.77ID:o3I8mN8U0
>>980>>981
ありがとう
ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize
こうしてたのが不味かったらしくAutoSize以外にしたらちゃんと右端のもColumnHeader機能するようになった
0983デフォルトの名無しさん (ワッチョイ ff02-VfHF)
垢版 |
2021/08/21(土) 23:10:50.06ID:7GAoG1Iq0
Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています

Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます

Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ

なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?

Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html


Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる

「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
0984デフォルトの名無しさん (ワッチョイ ff02-VfHF)
垢版 |
2021/08/22(日) 13:15:17.99ID:0Cz6ueFz0
Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています

Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます

Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ

なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?

Nimの実験的特徴 バージョン1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html

第二プログラミング言語として Rust はオススメしません Nim をやるのです
https://wolfbash.hateblo.jp/entry/2017/07/30/193412


Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる

「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
0986デフォルトの名無しさん (ワッチョイ ff2f-YpYZ)
垢版 |
2021/08/24(火) 22:42:58.40ID:VqhrUkYM0
変数って全てカプセル化して関数でアクセスするようにしないと駄目ですか?
変数がたくさんあるとき
private float hoge;
private float fuga;

void GetFuga
void BetHoge;

って関数たくさん用意するのも見ずらいと感じるのですが
0990デフォルトの名無しさん (ワッチョイ 9f73-C5Mt)
垢版 |
2021/08/25(水) 07:58:42.14ID:6XLAMhRo0
他の人使わないなら、プロパティーもフィールドも変わらん。
他の人使ってないなら別にdllでアセンブリ状態で参照させてないってことだから、
必要な段階でフィールドからプロパティーに変えればいい。
呼び出し側の書き換えも要らんし。
0994デフォルトの名無しさん (ブーイモ MM4f-X+pO)
垢版 |
2021/08/25(水) 10:55:37.16ID:sdRC5LrgM
機械的にプロパティやアクセサメソッドを実装するのはやめたほうがいいよ
面倒だと感じる時点で設計を疑ったほうがいい
DBのエンティティクラスみたいなのを除けば、本当にクラス外に公開する必要のある変数って極僅かなはず
0995デフォルトの名無しさん (アウグロ MM23-ujp1)
垢版 |
2021/08/25(水) 11:03:46.23ID:dGOrb7NRM
>>994
そんなことねーだろハゲ
処理1-24までの出力が全部必要な
処理25とか普通にあるだろ
その時処理1-24の閉じられたクラスのプロパティが全部必要になるとか普通によく見るわ
お前はないの?
経験値が足りないんじゃない?
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 101日 9時間 7分 32秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況