X



C#, C♯, C#相談室 Part94
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ワッチョイ 935f-5Uxj)
垢版 |
2019/03/20(水) 18:57:36.47ID:ZZcTomnN0
!extend:checked:vvvvv:1000:512
■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

■コードを貼る場合はこちら
http://ideone.com/

■前スレ
C#, C♯, C#相談室 Part93
http://mevius.5ch.net/test/read.cgi/tech/1492818720/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0900デフォルトの名無しさん (ワッチョイ 9924-UgiY)
垢版 |
2021/11/03(水) 11:12:45.02ID:s4xVDTJC0
>>897
Web関連は基本人間が理解出来る文字列でやり取りするから比較的難易度低い方
C#で作るならCの知識が必要になる場面なんて全くないはず
Html、Css、JavaScriptの知識はどの言語で開発するにしても多少必要にはなってくるがそんな難しくはない
0901デフォルトの名無しさん (テテンテンテン MMeb-PiCk)
垢版 |
2021/11/03(水) 16:24:16.20ID:XrFTraKdM
>>897
あなたが作りたいツールを作るにも10年ぐらい前ならもっと簡単な知識でつくれたんだけど、Flashからhtml5になった頃から技術的なレベルが高くなったのも一因
ニコ動、ニコ生にしても以下のステップを1つづつ目標にして。

1.ニコ動かニコ生のURLを入力してそのページの内容を取得して表示なり取得確認する
2.そのページから必要な情報を選択して取得する
3.ニコ生の場合は、その情報からwebsocketに接続して各種情報を取得
4.ニコ動の場合は、その情報からコメント情報を取得する

たぶんこの辺までできれば次どうすればいいかはわかると思うよ
0902デフォルトの名無しさん (ワッチョイ fb10-9kQe)
垢版 |
2021/11/03(水) 20:51:20.05ID:b4M0oSaD0
今時はIEコンポーネントブラウザを使わないからだよ
ニコニコの場合は
(1)Javascriptでブラウザの拡張機能を書く
(2)Pythonでダウンローダーや巡回、予約
で大半だよね、C#の出番はあまりないん
0903デフォルトの名無しさん (ワッチョイ 515f-vonH)
垢版 |
2021/11/05(金) 19:37:49.44ID:1GMX4TDW0
API使わずにスクレイピングっていいのか?
0906デフォルトの名無しさん (ササクッテロ Sp79-y4Tz)
垢版 |
2021/11/08(月) 19:23:08.09ID:jl5nUU4op
SQLのパラメータって使いまわせなかったっけ?

例えば下みたいなSQLがあったとして
string sql = "UPDATE HOGE_TBL SET HOGE = :hoge WHERE HOGE = :hoge ";

パラメータが下1つだけだったら更新件数0件で上手く動かない…
cmd.Parameters.Add(new OracleParameter(":hoge", "huga"));

Javaだと上手く動くけどC#は明示的に分けないとダメな感じ?
0909デフォルトの名無しさん (ササクッテロ Sp79-y4Tz)
垢版 |
2021/11/09(火) 12:25:10.04ID:+zMu32a8p
>>908
dクス
0910デフォルトの名無しさん (ガックシ 0671-09aj)
垢版 |
2021/11/12(金) 14:47:41.59ID:LR2kPQ3V6
最近c言語習い始めた初心者なんですがwhile()のカッコ内の条件式に論理演算子を使うことはできますか
もしできるならif文の時のように入力すればいいのでしょうか
0912デフォルトの名無しさん (ワッチョイ 2524-Ny61)
垢版 |
2021/11/13(土) 11:48:36.10ID:WnzBfGlt0
C#10で文字列補間が大幅に最適化されたってことらしいけど、
stringオンリーの4個以内(Concatの最大引数以内)以外は$"{}"で繋げていった方がむしろパフォーマンス良くなるって認識でOK?
0914デフォルトの名無しさん (ワッチョイ 7501-D258)
垢版 |
2021/11/17(水) 00:43:34.98ID:qSiAIVdk0
わけあってVisual Studioをインストールできない環境があるのですが、
その環境で
Windows標準のC#コンパイラ(C:\Windows\WinSxS配下のcsc.exe)

Visual Studio Code
でC#コンパイル環境を作成したいのですができますか?

以上、よろしくお願いいたします
0916デフォルトの名無しさん (ワッチョイ 7501-D258)
垢版 |
2021/11/17(水) 18:51:18.08ID:qSiAIVdk0
>>915
積むかどうかは分からないですね
私は超能力者ではないので
0917デフォルトの名無しさん (ワッチョイ 7501-09aj)
垢版 |
2021/11/17(水) 20:50:08.18ID:iuNg9UQr0
ビスマルク「愚者は経験に学び、 賢者は歴史に学ぶ」
0920デフォルトの名無しさん (ワッチョイ 4de6-wt4Y)
垢版 |
2021/11/17(水) 22:48:30.86ID:OY6bKJls0
普通の会社で使えるのは2017までなんだよな
0922デフォルトの名無しさん (ワッチョイ 7501-09aj)
垢版 |
2021/11/17(水) 23:14:07.67ID:iuNg9UQr0
まだ2021年なのに?
0925デフォルトの名無しさん (ワッチョイ 8eda-xqyN)
垢版 |
2021/11/19(金) 01:11:50.72ID:4qGzfQ8F0
コマンドが格納されたListを順番にサーバへ送信し、
1が返ってきたら次のコマンド送信、1以外かTimeoutしたら即中断みたいな処理を
ractiveでサクッと書けますか?

var cmdList=new List<string>{ cmd1, cmd2, ... };

cmdList
 .ToObservable()
 .TimeOut( ・・・ )
 .SendCommand()
 .WaitResponse()
 .PostRecv(1だったら次のコマンド送信、1以外やタイムアウトなら処理中止);

みたいな感じで。。
0929925 (ワッチョイ 8eda-xqyN)
垢版 |
2021/11/21(日) 00:41:13.81ID:7ZBVrJXA0
ReactiveExtentions(System.Reactive名前空間 ver5.0)を使ってます。
自分なりに書いてみましたがこのライブラリの使い方がよくわかってない状態です。
(疑問点をコメントに書きました。分かる方教えてください)

IDisposable d = cmdList
 .ToObservable()
 .Timeout( TimeSpan.FromSeconds( 3000 ) )
 .Select( cmd =>
 {
  var res = this.SendCommand( cmd ) // 自作のコマンド送信関数;
  return res;
 } )
 .Where( res => res == 1 )
 .Subscribe(
  res => /* ここで次のコマンド送信を行う書き方が分からない*/ res.ToString(),
  ex => Debug.WriteLine( ex.Message /* Timeout発生時 */ ),
  ()=> Debug.WriteLine( "Complete" /* 全ての送信完了?それとも1つだけ送信完了? */ )
);

>>927
やはりToAsyncEnumerbleからアプローチするべきなんですかね。。
0931デフォルトの名無しさん (テテンテンテン MM8e-YpRD)
垢版 |
2021/11/21(日) 10:42:16.16ID:XHu2qeE/M
Rxは監視を行うもの
時系列に沿って要素が流れてくる時に使うもの
なのである要素が流れてきた時に次の要素なんてのはまだ無い
要素が最初から揃ってるListから始めるからわからなくなる
最初から揃ってるなら普通にLinqかforeachを使う
Listでなくストリームならこれでおk

var d = CommandStream
.Select(c => Send(c))
.Timeout(t)
.TakeWhile(r => r == 1)
.Subscribe();
0932デフォルトの名無しさん (ワッチョイ bf4b-1Ur4)
垢版 |
2021/12/10(金) 11:57:57.31ID:ceXBGTs50
次元の違う配列ではArray.Copy出来ないのでしょうか。

例)
var foo = new int[4];
var bar = new int[3, 4];
ArrayCopy(foo,0,bar,0,4); // 例外発生 "The specified arrays must have the same number of dimensions."

1個づつコピーするしかないのでしょうか?
0936デフォルトの名無しさん (ワッチョイ a724-C40i)
垢版 |
2021/12/10(金) 13:21:12.71ID:/7sxHGOs0
MemoryMarshal.CreateSpan(ref bar[i, 0], 5000)とかやっても確か例外でないから最新の注意を払う必要はある
まぁこうやってもソースの長さがデスト以内であれば問題は生じないけど
0937デフォルトの名無しさん (ワッチョイ c702-p36F)
垢版 |
2021/12/12(日) 04:59:13.07ID:/1pFbOYv0
入力を検知したときにメソッドを実行する処理において、
要素Aがnullでなく(エラー防止)、Aの子要素Boolがtrueの場合のみ処理をスキップしたい場合に いい書き方はありますか?
!A.Bool でメソッドを実行にしてしまうとAがnullだったときに実行されなくなってしまうので……
ひとまずgotoを使って以下のようにしているのですが、もっとスマートな書き方ありますでしょうか

if (Input)
{
if(A != null){
if(A.Bool){
goto INPUTSKIP;
}
}
Method();
}
INPUTSKIP:
0940デフォルトの名無しさん (ワッチョイ a701-p36F)
垢版 |
2021/12/12(日) 09:36:50.05ID:G8rzE1470
>>939
それを反転させて
if (Input)
{
if (A == null || !A.Bool)
{
Method();
}
}
0941デフォルトの名無しさん (ドコグロ MM9f-JVtf)
垢版 |
2021/12/12(日) 10:16:02.74ID:2rSkF5hnM
>>937
goto 使いたくないと言うなら A が null か、A.Bool が false の時に処理したいってことだから普通に

if(A == null || !A.Bool){ 処理 }

って書くか>>938が言うnull条件演算子とnull合体演算子を使って

if(!(A?.Bool ?? false)){ 処理 }

でいける
個人的にはこの場合だと上の方がわかりやすいと思う
0944デフォルトの名無しさん (ワッチョイ c702-p36F)
垢版 |
2021/12/12(日) 12:48:33.01ID:/1pFbOYv0
AがnullだったときにORで並べてA.Boolの条件式を使ってしまうとそんなもんないよってエラーを吐くのでは、
と思い込んでいたのですが大丈夫なんですね……!
!A.Boolだけで判定したときに怒られたので頭凝り固まってました!

ありがとうございました!
0946デフォルトの名無しさん (ワッチョイ c702-p36F)
垢版 |
2021/12/12(日) 13:17:35.22ID:/1pFbOYv0
>>945
ああーなるほど、ORの場合どれか1つでも満たされてれば実行されるから
左側が条件を満たしてたら右側はもうチェックされないのか!!
良いこと知れました! ありがとう!
0952デフォルトの名無しさん (ワッチョイ a701-4A0X)
垢版 |
2021/12/13(月) 09:12:51.67ID:7pnzZ4JB0
>>937
条件式をネストしたり&でつないだりと複雑にするのは難読性が高くなるから分けたほうがいいだろ
どういう条件ならMthod()を呼ぶのか明確に

if(Input){
//事前処理
judge=(A==null) ? true: //Aがnullのとき
A.Bool==false ? true: //Aの子要素がfalseのとき
false; //それ以外
if(judge) Method();
//共通処理
...
}
0954デフォルトの名無しさん (ワッチョイ df01-c3Ov)
垢版 |
2021/12/13(月) 11:44:51.75ID:zykNHKxZ0
skipするほうが例外的処理だろうからskip条件を明確にしてearly returnしたほうがいいと思う
論理式の細かい書き方よりも意図が伝わるかどうかのほうが大事

if (ShouldSkip(a)) {
return;
}
Method();

bool ShouldSkip(A a) {
return a?.Bool ?? false;
}
0955デフォルトの名無しさん (ワッチョイ bf62-Trcr)
垢版 |
2021/12/13(月) 14:01:49.98ID:z2L+bKXw0
メソッドにすんのはいいけど、>>937 が入力を検知したときメソッドを実行したいって言ってんだからその通りに書けばいい
設計書通りに条件分岐すりゃいいのに無駄に置き換えて実装する人多いけどなんなんだろうね

if(入力検知(input, A)){
Method();
}

bool 入力検知(bool input, A a){
return input && a != null && a.Bool;
}
0956デフォルトの名無しさん (アウアウウー Sa6b-p36F)
垢版 |
2021/12/13(月) 14:22:24.69ID:6wRfW5vFa
昼飯食いながら適当だから何か勘違いしてるかもしれないけど、>>937って要は
ある条件を満たした時だけMethodを実行したい、それだけでしょ?

だったら四の五の言わずに素直にそう書くのが一番じゃないの。
if( input && (!A?.Bool ?? false)) Method();
0957デフォルトの名無しさん (アウアウウー Sa6b-5lnE)
垢版 |
2021/12/13(月) 14:29:51.31ID:KmNdaGVTa
求めてるのは「もっとスマートな書き方」だからな
主観的な問題だから、俺らが言えるのは「こういう書き方もある」ってのだけ
正解(どれが一番か)を決めれるのは本人だけ
0958デフォルトの名無しさん (アウアウウー Sa6b-p36F)
垢版 |
2021/12/13(月) 14:47:42.73ID:6wRfW5vFa
コードでも文章でも読み手に「要するにそれってどういうこと?」って思わせないのが一番。
これもコードでも文章でもそうだけど、読みにくいものは書いた本人がそこをよく理解せずに書いている。
0961デフォルトの名無しさん (ワッチョイ df01-c3Ov)
垢版 |
2021/12/13(月) 16:35:33.81ID:zykNHKxZ0
>>955,956
>>937を読む限りでは入力を検知する処理と
検知した後に特定の処理をスキップするかどうかを判断する処理は別じゃないのかな?

「A.Boolがtrueなら入力を検知しない(or 入力を無視する)」ってことなら
入力よりも先にA.Boolを確認するよね
0994デフォルトの名無しさん (ワッチョイ ff6e-n/si)
垢版 |
2021/12/19(日) 09:44:58.73ID:QHfeHH9E0
WinFormsを独学でやっているのですが教えて下さい
そこそこの規模のソフトは作れるようになってますが
VSで開発していくうえで、フォルダ構成ってどう考えればいいですかね
いままではDB関連をDBフォルダ
フォームはFormにまとめてさらにその中に機能別にフォルダを
細かいクラスファイルはClassというフォルダに
DBとの受け渡し(sql書いてFormとの受け渡しModelみたいなもの?)は
Modelというフォルダにまとめています

プロの皆様はチームで作っていかれる際に
会社によりけりかもしれませんが一般的なフォルダ構成の考え方ってあるんでしょうか
0996デフォルトの名無しさん (アウアウウー Sa9f-f5lq)
垢版 |
2021/12/19(日) 10:00:48.95ID:n0pWJPWXa
なんのフォルダなのか理解できない
プロジェクト(visual studio上でのプロジェクト)内じゃフォルダ切ることはないな
プロジェクトがある程度大きくなったらクラスライブラリに分ける
0998デフォルトの名無しさん (ワッチョイ ff6e-n/si)
垢版 |
2021/12/19(日) 10:33:08.48ID:QHfeHH9E0
>>995
そうなんですね、気をつけます

>>996
たとえば画面数でも100超えて、機能部分のClassファイルも100越えてくると
いちいち該当ファイル探すのが面倒でフォルダに分けたって感じです
前はPHPのフレームワークとか触ったときは
たとえばcontroller model viewとフォルダも階層構造みたいになっていて
そういう感覚もあります
チームでやられていると、どこに何のファイルが散らばっているか
わからなくなったりしないのですか? きちんと仕様書があるから関係ないのですかね

やっぱりクラスライブラリ(DLL化?)もちゃんと理解しないと駄目ですよね
一人で作ってるので、DLL化するほうが手間な気がして避けてました
レス数が1000を超えています。これ以上書き込みはできません。

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