3

C# では、次のように記述できますか。

if (
     (
            try {
                ...
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
     ) == true
   )
{
...
}

すべての try/catch ブロックを新しい関数内に移動する必要はありません

- 編集 -

わかった。質問を完了します。(そして多分それに少し答えます)。try/catch にあるはずのものは、一種の XmlDocument.TryLoad(stream) (int.tryParse(string) があるように) です。必要なのは一度だけなので、余分な機能を作りたくありませんでした。だから私のコードは次のようになります

            try {
                new XmlDocument().Load(foo);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }

それがうまくいかないかどうか知りたいだけです。理由は気にしません (ストリームが空、エンコーディングが正しくありません)。

興味深い回答がたくさんありますが、xmlDocument の拡張メソッドを作成するのがより適切だと思います。ステートメントで匿名メソッドを強制しようとするよりも、はるかにクリーン (および再利用可能で読みやすい) になります。

4

4 に答える 4

10

その正確な構文を使用することはできません。あなた書くことができます:

Func<bool> func = () =>
{
    // Code in here
};

if (func())
{
    ...
}

...しかし、個人的には別の方法で抽出します。かなり読みやすくなる可能性が高く、テストも容易になる可能性があります。

于 2013-09-03T08:25:41.920 に答える
1

このような例外をキャッチすることもお勧めしませんが、次のようになります。

    public static bool Try(Action action)
    {
        try
        {
            action();
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

使用例

        int x;
        int a = 0;
        int b = 1;
        if (Try(() => x = a/b))
        {

        }

        if (Try(OtherMethod))
        {

        }

        if (Try(OtherMethod(1,2)))
        {

        }
于 2013-09-03T09:03:16.657 に答える
0

C# 言語仕様 5.0 (8.7.1)から:

if ステートメントは、ブール式の値に基づいて実行するステートメントを選択します。

しかし、あなたのコード:

 (
 try { return true; }
 catch (Exception ex) { return false; }
 ) == true

ではなく、boolean expressionですstatement

于 2013-09-03T08:35:51.393 に答える