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

■ このスレッドは過去ログ倉庫に格納されています
2020/02/19(水) 17:25:41.55ID:IsrGexiaF
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part146
https://mevius.5ch.net/test/read.cgi/tech/1576069931/
■関連スレ
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/
■コードを貼る場合は↓を使いましょう。
http://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/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://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
2020/05/03(日) 11:04:56.94ID:m1rOQWOt0
Windows以外のOSでも動くからそれは間違ってる
578デフォルトの名無しさん (アウアウエー Sa9f-ur4w)
垢版 |
2020/05/03(日) 11:47:56.93ID:zajIy9nAa
Windows に WSL BOW 等があるように
C# にまるごと Windows が付いてくる訳じゃないのな?
2020/05/03(日) 14:41:41.12ID:O9QRGsEr0
>>576
何を言ってるんですか?
2020/05/05(火) 03:04:26.70ID:ODFnlIPd0
>>552
プロジェクト内のファイル書き換えればいける
https://github.com/cefsharp/CefSharp/issues/1714
もしくはプロジェクトの設定でAnyCPUじゃなくせばおk
2020/05/05(火) 07:23:25.99ID:AqRvYPWH0
【新型コロナ】富士フイルム、ゲイツ財団などからコロナ治療薬の製造受託
https://asahi.2ch.net/test/read.cgi/newsplus/1588319133/

c# プログラマ専用病院を作って、外から鍵かけて、理論的致死量の5倍ぐらい未承認治療薬を投与すれば開発速度が上がると思う。

コンピューターオタクに人権はないから、人権侵害にはならないし、c#プログラミングなんて 5ch とスタックオーバーフローを見れば誰でもできるから、プログラマ不足にもならない。
582デフォルトの名無しさん (ワッチョイ 2301-jgrQ)
垢版 |
2020/05/12(火) 00:36:35.47ID:xM8JclQ70
ttps://qiita.com/satorimon/items/5d2e6db7fe938fee958c
C#でこのページを参考にしたコードを書いているのですが、
var squares = contours.Where(a =>
{・・・})
のところの記述の意味がよくわかりません
中で宣言やらreturnやらしていて何がなんだか・・・でもビルドすると正常に動いてます
Whereで調べてもこのような構文での使い方が出てこなくて困っています
583デフォルトの名無しさん (ササクッテロレ Sp33-wEAr)
垢版 |
2020/05/12(火) 00:42:27.10ID:oML3x0+6p
>>582
ただの無名関数にしか見えないが...
2020/05/12(火) 00:43:24.46ID:SOptQxct0
LINQというものです
585デフォルトの名無しさん (ワッチョイ 5b2d-C0uG)
垢版 |
2020/05/12(火) 00:44:45.73ID:Rm1nFE+i0
>>582
c# ラムダ式
で検索
2020/05/12(火) 00:57:05.47ID:rr7jvTFY0
Whereで調べても使い方出てくるよ
IEnumerable<string> query = fruits.Where(fruit => fruit.Length < 6);
https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.where?view=netcore-3.1

ただリファレンスにあるWhereメソッドのシグニチャを
初心者が理解できるようになるまでの道のりは結構長いな
public static IEnumerable<TSource> Where<TSource> (this IEnumerable<TSource> source, Func<TSource,bool> predicate);
2020/05/12(火) 01:39:09.58ID:zR/fg8GXa
親クラスを参照する方法はありますでしょうか。
Javaで書くなら以下のイメージとなります。
class A {
int val;

class B {
void Method() {
A.this.val; // ここで親クラスを参照したい
}
}
}
2020/05/12(火) 01:41:52.90ID:xM8JclQ70
>>582です
理解出来ましたありがとうございます!
2020/05/12(火) 01:47:51.53ID:ApYFe+qM0
>>587
BはAとインスタンスは独立してるから
BのコンストラクタでAを受け取ってフィールドに置いておくとかする
590デフォルトの名無しさん (アウアウウー Sa1f-OGoq)
垢版 |
2020/05/12(火) 01:54:35.84ID:DaJUnBm/a
>>587
ここの記述の通り
https://ja.wikipedia.org/wiki/C_Sharp%E3%81%A8Java%E3%81%AE%E6%AF%94%E8%BC%83#%E5%86%85%E9%83%A8%E3%82%AF%E3%83%A9%E3%82%B9
2020/05/12(火) 01:59:01.93ID:zR/fg8GXa
>>589-590
ありがとうございます
2020/05/12(火) 22:22:13.93ID:/QEFAV670
参照型の変数ってないんですか?
int c = Properties.Settings.Default.Counter

みたいにエイリアスっぽく使いたいのですが、何かいい方法あるでしょか
2020/05/12(火) 22:35:54.36ID:Qqvr4tTg0
>>592
メソッドの返り値にする
private int counter() {return Properties.Settings.Default.Counter;}
2020/05/12(火) 22:41:58.71ID:ApYFe+qM0
エイリアスっていうからC++でいうところのT&型かと思ったけど違うのか?
C#で「参照型の変数」って普通のstring text;とかDataTable table;とかになるけど
595デフォルトの名無しさん (ワッチョイ 6a6a-oySJ)
垢版 |
2020/05/12(火) 23:23:20.17ID:qR+vLqM00
ref のことじゃね?
ref var x = ref Xxxxx;
2020/05/13(水) 00:03:03.61ID:J5ZD6qBk0
int? のことじゃね?
2020/05/13(水) 00:12:10.85ID:OFLzozUz0
ポインタで全て解決
2020/05/13(水) 00:15:30.74ID:7szTGv5D0
>>596
それはボケ?
2020/05/13(水) 00:30:19.64ID:NaKv0jEn0
何がしたいのかわからないけど
もし毎回フルで書くのがしんどいとかなら
>>593のやり方が一番安全だと思う
2020/05/13(水) 00:36:24.06ID:WBibu7Ic0
using Counter = Properties.Settings.Default.Counter;
2020/05/13(水) 01:04:23.01ID:9AF39pvJ0
ポインタが欲しいんだろ

class valInt{
public int val;
}

class valStr{
public string val;
}

って作っとけば?
普段は全く必要ないのに
リフレクション使うとき滅茶苦茶必要になったわ
2020/05/13(水) 01:11:53.36ID:HB9dDlz00
質問失礼致します。

list1にはboolが3つ入っています。
list2はクラスが3つ入ったリストで、そのクラスにはpublic bool flagが宣言されています。

両方falseの番号が見つかるまで繰り返したいです。

public int Check(){

int x = list1.IndexOf(false);

while (list2[x].flag == true){

x = list1.IndexOf(false, x +1)


return x;
}

このコードを書いたのですが、
list2[x].flagが3つ全てtrueだった場合にx+1が範囲外になってエラーが出ていると思われます。

条件に合う物が見つからない時にも何か(-1とか)返せる様にすれば良いのかもしれませんが、どうすればいいのかまったくわかりません。。

どうかヒントだけでも教えて下さい、、
よろしくお願いします。
2020/05/13(水) 01:17:14.99ID:HB9dDlz00
書き込んだあとに気付いたのですが、もしかしてwhileの中のxはforと違って繰り返すたびに更新されないのでしょうか?
604デフォルトの名無しさん (アウアウウー Sa31-L7FI)
垢版 |
2020/05/13(水) 01:32:42.10ID:RZkyIb9Ia
>>602
何で素直にforでスキャンしないの?

コードを書く前に、まずそれを自分が手動で行う場合の手順を日本語で明確に表現しましょう。
次にそれをコードに変換する。

インデックスを0, 1, 2と増加させて、両方falseならその時のインデックスを返すんでしょ?
何でそれを素直にコードにしないの
2020/05/13(水) 01:37:13.82ID:HB9dDlz00
>>604
すみません、2日間上手く行ってなくて最初はforで試行錯誤してたんですけど何回も調べて書き直してってやってる間になにがなんだかわからなくなってしまいました。。

もう一度forでやってみます!
2020/05/13(水) 08:02:36.01ID:9jM9qfYw0
>>605
プログラミング自体初心者だと思うけど基本的にwhileは使わないほうが良いよ(ちょっとしたミスで無限ループに陥ってフリーズする等バグの温床になる)
あとlist2に入ってるクラスをboolフィールドもう一つ拡張してlist2だけで運用できない?
一応既存の場合ならこういうコードでいい

for (int i = 0; i < list2.Count; i++)  //list2を中心に回す
{
 if (i >= list1.Count) break;  //list1が範囲外になったらforを抜ける
 if (!list1[i] && !list2[i].flag) return i;  //両方falseならインデックスを返す
}
return -1; //全て探し終えてもfalse && falseが見つからなかったらここに到達してreturn -1
2020/05/13(水) 09:30:48.50ID:RdUH2aEBa
> whileは使わない方が良いよ
それは同意しない
その程度でバグを起こすようなレベルなら何使おうがどうせまともに動くわけない
forをはじめとした、より抽象度の高い他の機能によって自然に代替できるケースにおいてはwhileより他を好むべきだとは思うが、
whileの方が自然なケースってのは存在する
2020/05/13(水) 09:31:40.13ID:HB9dDlz00
>>606
おはようございます。
丁寧な回答ありがとうございます。
仰る通りプログラム自体初心者です。。
一応あの後、

int index = -1;

for(int i =0; i < list1.Count; i++){

if(list1[i] == false && list2[i].flag == false){

index = i;
return index;

}

return index;

}

という風にやってみました。
合っているかわかりませんが、、一応動作しています。
breakで抜ける方法なども想像すらしてなかったので大変勉強になりました。
教えて頂いたコードの方がが安全そうなので参考にして書き直してみます!

本当にありがとうございました!
2020/05/13(水) 10:00:08.37ID:HB9dDlz00
>>606
うまく動作してると思っていたのですが、list2の要素数が3未満の時にバグってました。。
丸々使わせて頂いたら正常に動作しました。
重ねてお礼申し上げます。。
2020/05/13(水) 10:20:12.64ID:tJ/HyvQb0
>>593
さんくす、メソッド使うとはちょと予想外でした、いろいろ応用できそう
>>594
さんくす、C++はいまいちわかってないんですが、こんな感じでしょか
int& c = Properties.Settings.Default.Counter

>>595
いけました、うまくうごきました?さんくすです
>>596
ごめんなさいよくわかりません
>>597
いまさらポインタ
2020/05/13(水) 10:25:24.49ID:tJ/HyvQb0
>>599
何度も使う長い変数をさくっと書きたいなあっと、置き換えでいいんですが、どんなのが標準なのかなと
>>600
さんくす、これいいですね
>>601
さんくす、ポインタっぽいことしたいんですが、ちょと中身が理解できませんでした
2020/05/13(水) 11:51:27.79ID:9AF39pvJ0
>>611
だから、クラスでラップするとかしないとポインタっぽいことできないんだってばこの言語
613デフォルトの名無しさん (アウアウウー Sa31-L7FI)
垢版 |
2020/05/13(水) 12:42:25.67ID:KNUhyNjza
別にエイリアスじゃなくて一時変数でいいじゃん
int hoge = Foo.HogeHageDebuBaka;

書き換えないならそもそもエイリアスである必要がないし、
書き換える必要がある場合もほとんどのケースは一時変数に対する変更を最後に一か所で
元のフィールドなりプロパティーに書き戻すだけで済むと思うんだけど違うのかな。
2020/05/13(水) 12:46:03.36ID:0MZWSb+/0
単にマクロ的に短く記述したいってことなら使用先のcsファイルの一番上にこれ書いとけばいい

using static c = Properties.Settings.Default.Counter;
615デフォルトの名無しさん (アウアウエー Sa93-ahgx)
垢版 |
2020/05/13(水) 13:28:16.32ID:w7cEJ83Ea
Console.Out にデータを書く A.exe (ソース A.cs がある) と
Console.In からデータを読み込む B.exe があるとき
A | B
で B.exe 側で A.exe が書いたデータを取り出せるところまでは確認しました
そこで A.exe の中から
ProcessStartInfo psi = new ProcessStartInfo(){
FileName="B.exe", Arguments="", RedirectStandardInput=true,
RedirectStandardOutput=false, RedirectStandardError=false,
UseShellExecute=false, CreateNoWindow=true, ErrorDialog=false};
Process p = Process.Start(psi);
Console.WriteLine("test");
// p.WaitForExit();
// p.Close();
とすると
>error: ファイルを格納しているボリュームが外部的に変更されたため、開かれているファイルが無効になりました。
というエラーが出てしまいます。
Console.WriteLine("test"); のところを p.StandardInput.WriteLine("test");
にすれば書き込めるらしいのですが出来れば A.cs の変更を極力したくないです
あと
Console.Out.WriteLine("test"); もダメでした
RedirectStandardInput=false, もだめでした
何か使い方間違ってますか?
616デフォルトの名無しさん (JP 0H13-2td9)
垢版 |
2020/05/13(水) 13:30:17.94ID:9ouyGW4jH
IT掲示板群 ttp://x0000.net/forum.aspx?id=15

学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0
2020/05/13(水) 13:49:55.90ID:uqtilrQeM
>>615
var tmp = Console.Out;
try {
var p = Process.Start(psi);
Console.SetOut(p.StandardInput);
Console.WriteLine("hoge");
p.WaitForExit();
}
finally {
Console.SetOut(tmp);
}
2020/05/13(水) 16:30:12.93ID:tJ/HyvQb0
>>612
C++の上位互換で、わざわざ使わないだけで使おうと思えば使えるものだとおもってました、ポインタ
>>613
さんくすね、それだとFoo.HogeHageDebuBakaが変化したときにやばいかなと
>>614
さんくすね、プリプロセッサで置換みたいなので大丈夫だと思うけど、staticが入るとどう変わるんだろか
2020/05/13(水) 16:42:19.79ID:9jM9qfYw0
ポインタは使えるけどC++と違ってstaticなオブジェクトですらガベコレによってアドレス変わる可能性が常にあるから
長寿命なポインタというのは自前でガベコレ管轄外のアンマネージドメモリを確保しない限り成立しない
2020/05/13(水) 17:08:14.26ID:D3xPcSfY0
>>602
whileのロジックが足りない

while((x != -1 && x < list1.Count) && list2[x].flag)

にするとlist1の要素超えなくて見つからないと「-1」が返ると思うよ
2020/05/13(水) 17:24:13.51ID:D3xPcSfY0
>>615
確認していないので適当だけど、ProcessStartInfoで自分の標準出力を相手に
リダイレクトする指示をしているのに、自分の標準出力に書き出すメソッドを
使っているので、リダイレクトじゃない状態で出力されて相手がリダイレクト元を
見失っているんじゃないかな
>>617が書いてくれたのは書き込む前に自分の標準出力をリダイレクトに
切り替えているので、簡単にやるならば「p.StandardInput.WriteLine」を使うのが
良いんじゃないかな
あ、どうしてもConsole.WriteLineじゃなきゃダメって言うならば>>617の方法に
なるだろうけど
2020/05/13(水) 17:39:16.20ID:VSt/R8YQ0
Ruby では普通に、print, puts メソッドで出力したら、
標準出力・$stdout に出力される

どこに出力するかなど、考えたこともない
2020/05/13(水) 17:51:43.48ID:48KyBdoc0
>>622
相変わらずバカだね
2020/05/13(水) 18:25:56.36ID:VSt/R8YQ0
標準出力以外を使う場合は、標準エラーに出力する時だけ。
標準出力なら、パイプ・ファイルへのリダイレクトも使える

a.rb | b.rb パイプ
a.rb > b.rb 上書き
a.rb >> b.rb 追記
2020/05/13(水) 19:32:00.52ID:tJ/HyvQb0
>>619
なるほどね、実質ポインタは使い物にならないね、何が出てくるかわからないとか
2020/05/13(水) 20:56:37.22ID:WBibu7Ic0
>>624
rubyやpythonならspawnやpopen使って生成した
子プロセスの標準入出力の話
2020/05/13(水) 21:18:36.78ID:9jM9qfYw0
>>625
ローカル値型変数ならその関数抜けるまではスタック上にあることが保証されるからその関数内限定でCと同じように扱える
バイト配列等参照型もfixed (byte* ptr = &bytes[0]) {}と囲っている間はガベコレにアドレス移動させない通知を出せばそのスコープ間では扱える
ポインタフィールドを持たせたいとかになるとさっき言ったようなアンマネージドメモリを利用するしかないのでC#では実質不可能になってくる
628デフォルトの名無しさん (ササクッテロレ Sp63-5XO3)
垢版 |
2020/05/14(木) 02:19:30.95ID:2LmxtE+Tp
C#に、lispでいうmapcar関数のようなものはありますか?
2020/05/14(木) 03:11:58.67ID:HxdbbI2M0
>>628
Enumerable.Select()
2020/05/14(木) 10:45:17.58ID:n+ookAJTr
c#頑張ってきたのでc++ちょっとかじって浮気してきまっす!
挫折したら秒で戻ってきまっす!
2020/05/14(木) 11:26:58.59ID:ztWr1bjJ0
目的がかなり違う言語だから気をつけなされ
2020/05/14(木) 14:04:08.71ID:FSEZeoAj0
>>626
Ruby では、`コマンド`、system(コマンド)などは同期処理だけど、
spawn は非同期だから、すぐに子プロセスのPID が返ってくる

だから、Process.waitpid で、子プロセスの終了を待ち合せる必要がある

p pid = spawn('uname') #=> 1142

Process.waitpid pid

出力
Linux
633デフォルトの名無しさん (アウアウウー Sa31-7tKh)
垢版 |
2020/05/14(木) 14:53:15.52ID:0DpJdKOEa
List<string>をfor文中で繰り返し初期化して使用したいのですが、
List<string> 変数 = new List<string>()
で出来ますか?
それともfor文の最後でclearしないといけませんか?
ネットにソースが見当たらないので質問しました。ソースもあるよという方はその内容も教えていただきたく。
お願いいたします。
2020/05/14(木) 15:31:14.00ID:0NVqPTt90
forの中でList<string> 変数 = new List<string>()とループ毎に確保しているのなら終わり際にClearは書かなくていい
文字通りnewだからね
ただパフォーマンス的にはforの前で作ったリストをループ中の最後にClear()して使いまわす方が若干効率は良くなる
一般的な用途であれば差にもならない差だから前者で良いけど
635デフォルトの名無しさん (アウアウウー Sa31-7tKh)
垢版 |
2020/05/14(木) 16:08:02.92ID:0DpJdKOEa
>>634
なるほど、ありがとうございます。
2020/05/14(木) 16:24:15.76ID:oGs32I5W0
>>630
おかえり
2020/05/14(木) 16:24:31.04ID:oGs32I5W0
>>632
さよなら
2020/05/14(木) 16:25:38.87ID:oGs32I5W0
>>635
clearいれるだけ処理遅くなるぞ。不要や
2020/05/14(木) 16:26:53.55ID:oGs32I5W0
>>635
C#にはGC機能があるから
2020/05/14(木) 16:40:09.33ID:IzazKMsN0
>>627
限定的ながらもポインタ使えるんだね、少し>>601がわかった希ガスサンクス
641デフォルトの名無しさん (アウアウウー Sa31-7tKh)
垢版 |
2020/05/14(木) 16:56:49.51ID:0DpJdKOEa
>>639
GC機能ってfor文だけでは機能しないと思っていたんですが、初期化時点で古いのは解放されると思っていいんでしょうか?
2020/05/14(木) 17:09:46.09ID:IJMYY1560
>>638
ここは初心者が回答してみるスレじゃないぞw
2020/05/14(木) 17:11:23.42ID:oGs32I5W0
>>642
はあ?ループ中のリスト毎回clearするなんてアホなコードお前しか書かないだろw
2020/05/14(木) 17:17:42.65ID:PBygD1y70
それは言えてるな
2020/05/14(木) 17:23:39.55ID:0NVqPTt90
ListのClearは内部バッファの中身をデフォルトクリアしてCount = 0とするだけであってバッファのキャパ自体はそのまま
Clear後に利用する際にそのListインスタンスのキャパ以下の利用であれば内部でbuffer = new T[capacity]みたいな処理が走らないから効率化される可能性があるという話

一般的なプログラマであればこのようなことを考える意味は皆無なのでnewし直すが正解で良い
2020/05/14(木) 17:30:23.16ID:IJMYY1560
笑えるwww

今度からいちいちnewしてる馬鹿いたら、
あーこいつは初心者が回答してみるスレの住人だと分かっていいなw
647デフォルトの名無しさん (アウアウウー Sa31-7tKh)
垢版 |
2020/05/14(木) 17:32:02.50ID:0DpJdKOEa
>>645
承知しました。
2020/05/14(木) 17:36:51.73ID:5fNjH7LKM
>>646
恥ずかしい奴
2020/05/14(木) 17:41:31.72ID:IJMYY1560
>>648 ←ループの中でいちいちnewしてたnewtype発見w 初心者スレおもしれーwww
2020/05/14(木) 17:45:22.91ID:HxdbbI2M0
>>645
毎回newしたほうが効率がいいケースと
1つのListをClearして使い回したほうが効率がいいケースとそれぞれあるよね?
2020/05/14(木) 17:49:33.37ID:OtqKph2Y0
たまに勘違いしている人がいるみたいだが、このスレは「初心者用」のスレだから
質問者も回答者も「初心者」だよ
>>650
条件が詳しく書いてないんだから「場合によって使い分ける」
このスレでは「問題なく動けばいい」
2020/05/14(木) 17:56:08.67ID:PBygD1y70
まあ、newし直すのは意味はあるけど、
気になるのは同じ変数名を使い回してないかってことくらいやな
まあ、自分だけのコードなら好きにすればとしか
2020/05/14(木) 17:59:19.41ID:IJMYY1560
そういや初期のjavaの実装がそうだったなw 全部new。 糞おせーw
C#を実装したのがおまえらじゃなくてfastcall使いまくるヘジで助かったぜ。
2020/05/14(木) 19:05:04.03ID:oGs32I5W0
ID:IJMYY1560
今日の基地外
2020/05/14(木) 19:06:50.12ID:5fNjH7LKM
>>653
違うだろ?「勉強になりました。」と素直に謝ればOK
2020/05/14(木) 20:07:00.35ID:IJMYY1560
なんだもう自演煽りしかできないのか。情けない。

逐一newがいかに速いか知ったかして語ればいいのにw もっと初心者スレらしくアホを晒せw
2020/05/14(木) 20:31:18.28ID:5fNjH7LKM
>>656
違うだろ?「勉強になりました。」と素直に謝ればOK
2020/05/14(木) 23:37:20.23ID:oGs32I5W0
>>656
こーゆうレガシーな情報をアップデート出来ない老害コーダーがスコープとか意識出来ずにスパゲッティコード量産していくんだろうな。
2020/05/14(木) 23:59:13.36ID:IXDIM6PP0
List<string> 変数 = new List<string>();
for(;;){
 // 処理
 変数.Clear();
}

for(;;){
 List<string> 変数 = new List<string>();
 // 処理
}

これで言い争い?
2020/05/15(金) 00:33:19.38ID:mc9+JSH60
さうです。
2020/05/15(金) 06:10:46.00ID:QqRlTuRs0
言い争いなんか誰もしてません。ここは無知無双を観察するスレです。

clear()は遅いですw スパゲッティになるので逐一newしてますw java思想は正しいですw ヘジは老害コーダーですってwww
2020/05/15(金) 08:09:40.93ID:mZ/V4tLT0
上でも書かれてるけどClearってcount=0にしてるだけだろ?
2020/05/15(金) 08:38:30.68ID:4F5qAPuFa
怪しい時には実装にあたったほうがいいよ
https://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs,ca7bce81a50b0aeb,references
count=0だけじゃなくて配列の個々の値も初期値に戻してる
まあそれでも_sizeがかなり大きくない限りは参照型のインスタンスを都度生成して生成してヒープに置くよりローコストだと思うけど
664デフォルトの名無しさん (ワッチョイ 4f63-4oRg)
垢版 |
2020/05/15(金) 09:26:05.88ID:EzimMGOi0
争いと表現するのもおこがましさを感じる低次元さ
2020/05/15(金) 10:16:11.77ID:QqRlTuRs0
若者の夢は壊しちゃダメですよ。プライドはとても高いんですから。

あっ、老害コーダヘジのおれが考える現代風コンパイラのデータ構造の再利用実装についての動画を置いときますねw
https://channel9.msdn.com/Blogs/Seth-Juarez/Anders-Hejlsberg-on-Modern-Compiler-Construction
2020/05/15(金) 10:43:10.78ID:0cESgAsr0
議論でとりあえず有名人の名前出したり話すれば、有利になると思ってる単細胞な発想はやめよう
2020/05/15(金) 11:04:04.35ID:SPdgeRtp0
そろそろ誰かが比較出してくれるんじゃね
それで決着だろ
2020/05/15(金) 11:13:54.66ID:/Y86RUc5M
>>659
俺なら上を採用する場合一回分無駄になるけどループの先頭(可能であれば使う直前)にClear()を呼ぶ
669デフォルトの名無しさん (ワッチョイ 459b-gIXh)
垢版 |
2020/05/15(金) 13:18:50.33ID:+lfXgI6Y0
名前、年齢、部署を表示するListViewで、マウスを当てるとポップアップ表示されるように
したく、以下のようにコーディングしました

ListViewItem lList = new ListViewItem(name);
List.ToolTipText = name //ツールチップの設定
ListViewItem.ListViewSubItem lvs = UrlList.SubItems.Add(age);
lvs.Tag = txtSearchWord.Text; //ツールチップの設定
ListViewItem.ListViewSubItem lvs = UrlList.SubItems.Add(section);
lvs.Tag = txtSearchWord.Text; //ツールチップの設定

一応これでポップアップするようになったのですが、位置がリストの表示位置と
離れすぎているのでもう少し「リストの文字に覆いかぶさるように」調節したいのですが
方法はありますでしょうか?
2020/05/15(金) 13:21:44.25ID:TG5diAlh0
たぶんC#書いてると上を採用するケースは少ないと思う
671デフォルトの名無しさん (アウアウエー Sa93-yXYh)
垢版 |
2020/05/15(金) 13:44:50.97ID:OlE2WbGda
>>669
https://dobon.net/vb/dotnet/control/lvitemtooltip.html
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.listviewitem.tooltiptext
2020/05/15(金) 13:52:25.10ID:/bV5Wl+o0
でも下を採用すると
newとGCと場合によってはキャパ超えの処理が複数回
ループ毎に発生する
2020/05/15(金) 13:53:09.86ID:1rmq22iw0
.NETの範囲内だとToolTip自分で設定してマウスオーバーした時に自分でShowするぐらいしかないのかな
https://docs.microsoft.com/en-us/windows/win32/controls/ttn-show
Win32的にはTTN_SHOWでSetWindowPosしろって書いてある
ちなみにTTN_SHOWはListViewの派生クラスでWndProcオーバーライドすると捕まえられる
2020/05/15(金) 14:08:20.97ID:zOp0aFPX0
>>669
WPFだと表示位置を調整可能だけどWinFormだとデフォルトでは設定できないので
デフォルトのToolTipをオフにして自分でマウスイベント使ってToolTipを表示する
設定するToolTipのShow()メソッドで位置調整可能
2020/05/15(金) 15:37:07.91ID:Szckw36p0
オブジェクト複製の方法(ディープコピーやシャローコピー)を明示的に定義したインターフェイスはありますか
2020/05/15(金) 15:54:49.38ID:kU/eypzIM
ない
ICloneableがまさにコピー方法等の規定がなく役に立たないために非推奨となったが、特に代替となるインターフェイスはない
MSとしてはコンストラクタ引数にコピー元オブジェクトを渡すことによるコピーを推奨しており、
シャローコピーなのかディープコピーなのかはそのコンストラクタのドキュメントに書くのがよいと思われる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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