2009-08-28 6 views
0
bool isValid = false; 
string username = "someadmin"; 

If(!String.IsNullOrEmpty(username) && !(username.IndexOf("admin") != -1) 
    isValid = true; 

ダブルネガティブの2番目の部分は私を横切っています!このメソッドは何を返しますか?真か偽ですか?

+5

...よく、返信文が見えないと考えて、質問に答えることはできないと思います - ] –

+12

なぜ私たちにお尋ねしますか?あなたはそこにコードを持っています - それを実行し、参照してください! –

+0

このコードはコンパイルされません。比類のない賛成です。 –

答えて

4

それはそれはfalseを返します...

+0

ダメ、私にそれを打つ:) – Stephanvs

+0

"IndexOfは> = 0" - それほど、indexofも-1にすることができます。 "その文字列が見つかった場合、値のゼロから始まるインデックスの位置。そうでない場合は-1です。 –

+0

Lol、私はいくつかの読みやすいコードを完璧に作っていました。実際にはusername.IndexOf( "admin")> = 0です。戻り値が4または5でなければならないと思っていたよりも速く入力していました。それはコンピュータが私が推測するものです...しかし、幸いなことに質問者は私の答えに助けられました;) – Ropstah

1

を、それが最初に持っていたように、IsValidのは、同じ値が含まれます

!String.IsNullOrEmpty(username)   // this is true, the string is not NullOrEmpty 
!(username.IndexOf("admin") != -1)  // IndexOf is >= 0, so != 1 is true. But the first ! makes it false 

falseを返します。

0

isValidはfalseになります。

(Nitpick:このコードは何も「戻る」しません:。それだけisValid変数の値を設定します)

1

平易言語バージョン:(ユーザ名がnullまたは空ではない

場合とユーザー名に「admin」は含まれません) isValid = true;

0

最初の部分:ユーザー名がヌルか空文字列かどうかを確認します。 ifの2番目の部分:ユーザー名にadminサブワードが含まれているかどうかを確認します。おそらくAutorが両方の文字列を比較しようとしました。結果:ユーザー名が空でなく、ユーザー名がadminでない場合、isValidはtrueです。それ以外の場合は有効 - false。

0

false。しかし、私は質問をしない?これを実行できませんでしたか?どのようなダブルネガティブ?値はちょうど反転されており、括弧はステートメントが実行される順序を明確に示しています。

0

isValidに格納された値はfalseになります。

10

私はあなたDeMorgan's Lawsに提示する可能性がありますので、二重否定の除去...

if (!(String.IsNullOrEmpty(username) || username.IndexOf("admin") != -1)) { 
    isValid = true; 
} 

NOT (P OR Q) = (NOT P) AND (NOT Q) 
NOT (P AND Q) = (NOT P) OR (NOT Q) 

だから、あなたはとしてそれを書き換えることができます。

さらに、あなたが言うことができる:

if (String.IsNullOrEmpty(username) || username.IndexOf("admin") != -1) { 
    isValid = false; 
} 

...すべてのネガを除去します。

また、あなたが言うことができる:

isValid = !(String.IsNullOrEmpty(username) || username.IndexOf("admin") != -1)); 

...それは素晴らしく、コンパクトにします。

+0

DeMorganは素晴らしいです、ユーザ名に '' admin "'を含める必要はありませんか? –

+0

ねえ、良い点。それは私がコピー貼り付けをしないために得るものです。 –

0

それが原因行方不明括弧;-)

にあなたの構文エラーを与えるだろう。しかし、真剣に、それはfalseを返します。

!String.IsNullOrEmpty(ユーザー名)//ユーザ名が空のNOT NULLとされていない場合=>真

username.IndexOf( "管理者")!= -1 // "管理者" は、ユーザー名に発見された場合(-1でない)=> true

!(username.IndexOf( "admin")!= -1)//ユーザー名=>偽で "admin"が見つからない場合

結論:ifステートメントの条件が満たされていないため、isValidはfalseのままです。

PS:私はC#のプログラマーではありませんが、IndexOf(文字列)が-1のときは見つからないことを前提としています。

関連する問題