[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/07 13:31 / Filesize : 223 KB / Number-of Response : 993
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part53



1 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 20:11:11 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part52
pc12.2ch.net/test/read.cgi/tech/1238548552/

Visual C# 2008 Express Edition 日本語版
www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

その他テンプレ>>2-5くらい

964 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 00:39:36 ]
""(空文字列)との比較は以下のどれがいいですか?
それぞれのメリット・デメリットを教えてください。

@str.Equals("")
AString.Equals(str, "")
Bstr == ""
Csrt.Length == 0
D"".Equals(str)

965 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 00:45:34 ]
個人的には3
他は4以外objectで比較できちゃう
14はstrがnullのときを考慮しないといけない

でも大体はString.IsNullOrEmptyで片付けるかな

966 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 00:46:47 ]
あくまで個人的な意見だけど。
俺は「str==""」が一番シンプルかつ直感的でいいと思うね。

1. 参照アドレスの比較と差別化するという意味合いはご尤もだが…。ここまでする必要あるかなぁ。
2. 冗長。
4. 使う場面による。文字列自体に着目した流れで来てるのか、
  文字列の長さに着目した流れで来てるのか、というのが判断基準。
5. これは逆。どういう意図でこう書くんだろう。

967 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 00:58:15 ]
5の書き方はJavaかなんかでこうするのがイイ
みたいなのがどっかに載ってた気がする(そして当然叩かれてた)

C#だと3かIsNullOrEmptyだよね。

968 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 01:05:59 ]
fxcopにIsNullOrEmpty使えっていわれたような

969 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 01:14:50 ]
C#の世界でも割と「==使うなEquals()使え」っていう教条主義的意見は
見かけるね。

というか、俺の見解では、そもそも==がデフォで参照等価の検査なのが直感的じゃない。
少なくともこれに関してはVBの方がまともに感じる。
つまり、参照等価の検査用には別の演算子を導入することにして、==の方は
値等価用にオーバーロードしないと使えない方が分かりやすい。

まあそれを言うと、そもそもC由来の=と==からして逆なんじゃないのかとも思うが…

970 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 01:34:35 ]
しかし値の同一性ってのはデフォで定義できない

971 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 01:40:47 ]
Estr == string.Empty

972 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 01:42:52 ]
IsNullOrEmpty 派です。



973 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 02:14:56 ]
>>966
>5. これは逆。どういう意図でこう書くんだろう。
これはリテラルのequals()呼び出しだから、コンパイラが最適化してくれる
可能性がある、という説明で自分は納得した。
実際のところ本当かは検証したわけじゃないけど、どう再定義してるかわか
んないstrのequals()を呼び出すよりは速い可能性があるというだけで充分
に意味はあると考えてる。

974 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 02:22:55 ]
Javaでの話だけど、str.equals("")だとstrがnullのときにぬるぽの例外になるので、
"".equals(str)がいいんだって言っていた。
でも、まともな意見の人は"".equals(str)に否定的な人が多いという印象。

975 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 02:25:37 ]
君の印象ではなく「まともな意見」でどう否定したかが重要。

976 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 02:29:39 ]
つか str.Equals("") とほぼ等価でかつ str が null でも大丈夫だから
だろ。2 と 3 がほぼ同じ意味であることを除けば他は意味とか前提が
色々微妙に違う

977 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 02:57:02 ]
class Tuple<T1,T2>{ T1 _t1,T2 _t2}(アクセッサとか省略)みたいな奴で
Tuple<Hoge,HogeHoge> tuple1,tuple2の比較したいときに、class でなくstructなら_t1,_t2が各々==でtrueの時tuple1==tuple2になるんだっけ?
classでEqualsとかoverrideするのめんどくさいよ(´д`)ママン…
属性とかの指定一発でやってくれ・・・

978 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 03:46:49 ]
>>964
俺も>>971と同じ書き方するな。
でも null と空文字列で特別に違う意味がなければ IsNullOrEmpty を使う。

979 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 05:58:42 ]
str.Equals(string.Empty)か
String.Equals(str,stringEmpty)
だな。

javaと違って参照でも'=='が使えるのは知ってるんだけどね。


980 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 06:46:21 ]
String以外にも話を展開してみる。

Equalsはタイプセーフではない。
Equalsをoverrideするなら==、!=もoverrideしなければならない。
a.Equals(b)はnullチェックが面倒なので、Object.Equals(a,b)が有効。


981 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 06:50:49 ]
タイプセーフでないというのは事実だけど、型を意識しないで比較するのは個人的にはなしだ。
ライブラリ製作者と使用者で意見が食い違うところか。

982 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 07:22:05 ]
10.0と10は違うのか?→時と場合と人による
"a"と'a'は違うのか?→〃
10と10は違うのか?→〃

しかし”参照”としての比較はドメインが”参照”に固定されているので混乱しない
値の比較はドメインが固定できないので混乱する
値の比較であーだこーだ言っていてもはじまらね



983 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 07:35:17 ]
>>968はこれか
msdn.microsoft.com/ja-jp/library/ms182279.aspx

それはそうと次スレは?

984 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 08:59:39 ]
>>980
>タイプセーフではない。(
値型以外では使うことはまずないけど
IEquatable<T>.Equals(T o)
>Equalsをoverrideするなら==、!=もoverrideしなければならない。 
Stringのようにimutableでない限りは==や!=演算子のoverrideはするべきではない。

985 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 11:02:53 ]
なんで

986 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 12:31:41 ]
次ぎたててくる

987 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 12:34:22 ]
C#, C♯, C#相談室 Part54
pc12.2ch.net/test/read.cgi/tech/1250911923/

はい

988 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 12:44:02 ]
>>987
^^

989 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 13:00:55 ]
.NET 4では2.0の部分のパフォーマンスの向上とかあるのかな?

990 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 13:09:55 ]
BCL部分はC#4.0などにあわせて確実に手が入るけど
WinFormsはどうせ放置だろ

991 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 13:36:55 ]
>WinFormsはどうせ放置だろ
せっかく枯れてきたのに手を入れられてもねぇ…

992 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 13:40:42 ]
2005以降に追加されたコントロールのバグはしっかり直してくれないと
困ると思うけど…

toolstrip関連はバグ多過ぎなんだよ本当。








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<223KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef