0

以下のコードを短縮することは可能ですか?

基本的に、metaItem.Textは、「true」または「false」のいずれかを含む文字列プロパティです。ここでは制御できないオブジェクトを処理しているため、代わりにブール値にする必要があります。

まず、metaItem.Textに値が含まれているかどうか(つまり、空の文字列ではないかどうか)を確認する必要があります。その場合は、ブール値に変換します。次に、ユーザーコントロール(relatedLinks)のVisibleプロパティをその値に設定します。

if (metaItem.Text != string.Empty)
{
    bool bShowRelatedLinks = false;
    bool.TryParse(metaItem.Text, out bShowRelatedLinks);

    if (bShowRelatedLinks)
    {
        relatedLinks.Visible = true;
    }
    else
    {
        relatedLinks.Visible = false;
    }
}

速記を使用したい理由は、ページのさまざまな部分を表示/非表示にするためのこれらの条件がたくさんあるためです。

4

5 に答える 5

2
bool bShowRelatedLinks = false;
bool.TryParse(metaItem.Text, out bShowRelatedLinks);
relatedLinks.Visible = bShowRelatedLinks;

説明: まず、TryParse()指定できます(解析が失敗した場合にパラメーターをnull設定します)。第二に、設定時のテストは必要ありません。すでに値を持っているので、それを割り当てるだけです。outfalseifrelatedLinksbool

、、またはでmetaItem.Textあると確信している場合は、さらに単純化できます。"true""false"null

relatedLinks.Visible = Convert.ToBoolean(metaItem.Text);
于 2012-06-21T09:30:25.350 に答える
0

あなたのコメントなら

metaItem.Text は別のシステム (CMS) から取得されるため、「true」または「false」しかありません。これは文字通り文字列に変換されたブール値であるため、余分なスペースや「true」または「false」以外のものはありません

が実際に当てはまり、入力が文字列"true"または"false"であることを確認できる場合は、次のように簡単に記述できます。

var showRelatedLinks = metaItem.Text == bool.TrueString.ToLower();
relatedLinks.Visible = showRelatedLinks

また

relatedLinks.Visible = metaItem.Text == bool.TrueString.ToLower();

デバッグをもっと厄介にしたい場合;)

次に、ブール解析を行う必要はまったくありません。

于 2012-06-21T09:50:56.637 に答える
0

質問は速記に関するものなので、ケントのものより少し短いものを次に示します。

bool bShowRelatedLinks;
relatedLinks.Visible = bool.TryParse(metaItem.Text, out bShowRelatedLinks) && bShowRelatedLinks;

C# の遅延評価を利用します。

そして、ここにさらに短いバージョンがあります:)

bool b;
relatedLinks.Visible = bool.TryParse(metaItem.Text, out b) && b;

これを含めたのは、1 行だけで使用されるローカル変数をできるだけ単純な名前で保持するようにしたためです。これにより、コードが読みやすくなります。

于 2012-11-10T18:44:16.253 に答える
-1
relatedLinks.Visible = (metaItem.Text ?? "").ToUpper() == "TRUE";
于 2012-06-21T09:33:20.663 に答える
-3
relatedLinks.Visible = bool.TryParse(metaItem.Text, out bShowRelatedLinks);
于 2012-06-21T09:33:36.457 に答える