2009-08-28 15 views
2

私の質問は簡単ですが、可能であればC#で次のようにしています。 HTMLへC#の論理演算子の構造

<html> 
<head> 
<script src="../jquery-1.3.2.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(function(){ 
     $("#datos").append("<span style=\"font-weight:bold\">(false || null || \"1º\" || \"2º\")</span> : <span>"+(false || null || "1º" || "2º")+"</span><br />"); 
     $("#datos").append("<span style=\"font-weight:bold\">(false && null || false || \"2º\")</span> : <span>"+(false && null || false || "2º")+"</span><br />"); 
     $("#datos").append("<span style=\"font-weight:bold\">(false && true || \"1º\" || \"2º\")</span> : <span>"+(false && true || "1º" || "2º")+"</span><br />"); 
     $("#datos").append("<span style=\"font-weight:bold\">(true && null && 6 && 5)</span> : <span>"+(true && null && 6 && 5)+"</span><br />"); 
     $("#datos").append("<span style=\"font-weight:bold\">(null && true && false && false)</span> : <span>"+(null && true && false && false)+"</span><br />"); 
     $("#datos").append("<span style=\"font-weight:bold\">(false && true && false && false)</span> : <span>"+(false && true && false && false)+"</span><br />"); 
     $("#datos").append("<span style=\"font-weight:bold\">(true && 1 && true && 2)</span> : <span>"+(true && 1 && true && 2)+"</span><br />"); 
     $("#datos").append("<span style=\"font-weight:bold\">(true && \"1º\" && true && \"2º\")</span> : <span>"+(true && "1º" && true && "2º")+"</span><br />"); 
     $("#datos").append("<span style=\"font-weight:bold\">(true && true && \"1º\" && \"2º\")</span> : <span>"+(true && true && "1º" && "2º")+"</span><br />"); 
    }); 
</script> 
</head> 
<body> 
<div id="datos"></div> 
</body> 
</html> 

戻る:

(false || null || "1º" || "2º") : 1º 
(false && null || false || "2º") : 2º 
(false && true || "1º" || "2º") : 1º 
(true && null && 6 && 5) : null 
(null && true && false && false) : null 
(false && true && false && false) : false 
(true && 1 && true && 2) : 2 
(true && "1º" && true && "2º") : 2º 
(true && true && "1º" && "2º") : 2º 

はありがとうございます。

- コメント

ためEDIT私はC#で、次を実行する必要があります.NET ||&&演算子は強く型付けされているので

string value1 = string.Empty; 
string value2 = "default value"; 

// Request.Form["valueA"] and Request.Form["valueB"] may be null 
value1 = (Request.Form["valueA"] || Request.Form["valueB"] || value2); 
+3

私はあなたが求めているもの見当がつかない... – RedFilter

+0

は正確に質問何ですか? –

+0

質問は '(false || null ||"1º "||"2º ")'がC#で評価されるものです。答えでは、C#ブール演算子が強く型付けされているので、コンパイルされません。しかし、私はそれがC#で同様の便利なものを書く方法があるかどうか知ることは面白いと思うと思います... – dtb

答えて

3

は、これらの表現は、C#で無効です。

しかし、x場合yを返しx ?? yオペレータはそうnullxで、あり:

string value1; 
string value2 = "default value"; 

value1 = Request.Form["valueA"] ?? Request.Form["valueB"] ?? value2; 
           ^      ^
+0

+1。しかし、URLに "?valueA =&valueB = Hello"が含まれているとどうなりますか?;) – AnthonyWJones

+0

@Anthony文字列には何も起こりません。 norおよび変数 –

+0

EDIT:および任意の –

1

私が正しくあなたがC#は中くらい厳しいやり方を入力取り扱うことを理解する必要がありますあなたの「質問」を理解していれば。 Nullはfalseとして扱われません。実際、boolean式で使用できる唯一の型はbooleanです。これはjavascriptとは異なり、ブール式に任意の型を受け入れ、意味を推測します。

あなたがJavascriptで行っていることに近づく唯一の演算子は?? : -

var r1 = (null ?? "1º" ?? "2º") // Results in 1º 
var r2 = (null ?? null ?? "2º") // Results in 2º 

しかし、これは動作しません: -

var r1 = (null ?? 1 ?? 2) //Compile error 

整数値型で、nullにすることはできません。私は、プロパティ内のすべてを離れて押し込むだろう使用前にクエリ文字列/フォームの値の「処理」のわずかなヒントがあるときはいつでも

を編集するには

ソリューション。 (実際には、たとえそれがちょうど{return Request.QueryString["stuff"]; }であっても、そのようなアクセスをすべてプロパティに配置する傾向があります)。

string _Value; 
public string Value 
{ 
    get 
    { 
     if (_Value == null) 
     { 
     _Value = CoalesceNullOrEmpty(Request.Form["valueA"], 
      Request.Form["valueB"], 
      "Default Value"); 
     } 
     } 
     return _Value; 
    } 
} 

//Can place this in the page but is more useful in a utility dll 
public string CoalesceNullOrEmpty(params string[] values) 
{ 
    foreach(string value in values) 
    if (!String.IsNullOrEmpty(value)) 
     return value; 

    return null; 
} 

ここで、value1プロパティを使用した場合は、Valueプロパティを使用します。

0

一連のboolが必要な場合は、変換するクラスを作成して、必要なルールを適用してみましょう。あなたのルールが "nullの場合はfalse、そうでない場合はブール値です。そうでない場合はtrueです"という場合、このメソッドが機能します。

static List<bool> ToBool(FormCollection form) { // couldn't find the type on MSDN 
    List<bool> result = new List<Bool>(); 
    foreach (object o in form) { 
     if (o == null) { 
      result.Add(false); 
     } 
     else { 
      if (o is bool) { 
       result.Add((bool)o); 
      } 
      else { 
       // do whatever other conversion 
       result.Add(true); // probably the wrong thing - depends on what you're testing 
      } 
     } 
    } 
    return result; 
}