9

Shrinkrのソースコードを見ていると(他のプロジェクトのソースコードを確認して学ぶことができますよね??? :))次のkewlコードに気づきました..(以下、私が省略)

public virtual Foo Foo
{
    get;
    set 
    {
        Check.Argument.IsNotNull(value, "value"); 
        // then do something.
    }
}

彼らが議論をチェックする流暢な方法に気づきましたか?良い :)

代替テキスト
(出典:cherrythian.com

だから..コードをチェックすると、これを行うカスタムクラスがあります...

public static class Check
{
    public static class Argument
    {
        public static void IsNotNull(object parameter, 
                                     string parameterName)
        { ... }

        public static void IsNotNullOrEmpty(string parameter, 
                                            string parameterName)
        { ... }

 .... etc ....
}

そこに一般的なフレームワークはありますか?

gem install netFluentCheck

:)

4

5 に答える 5

6

私はCodeplexにあるCuttingEdgeConditionsを使用することになりました。

例えば。

// Check all preconditions:
Condition.Requires(id, "id")
    .IsNotNull()          // throws ArgumentNullException on failure
    .IsInRange(1, 999)    // ArgumentOutOfRangeException on failure
    .IsNotEqualTo(128);   // throws ArgumentException on failure

良い :)

于 2010-09-02T00:08:03.207 に答える
2

FluentValidationをお試しください

または.NET2.0のFluentValidation

于 2010-09-01T16:01:30.693 に答える
1

これは、私が少し前に書いたほんの数行の単純なクラスです(ここから:http ://code.google.com/p/hotwire-queue/wiki/QuickAssert )、流暢な検証に似た何かを行い、わずかに使用します私が少し読みやすいと思う別のスタイル(ymmv)。サードパーティのライブラリは必要ありません。検証が失敗した場合は、失敗した正確なコードを含む単純なエラーメッセージが表示されます。

config.Active.Should().BeTrue();
config.RootServiceName.Should().Be("test-animals");
config.MethodValidation.Should().Be(MethodValidation.afterUriValidation);
var endpoints = config.Endpoints;
endpoints.Should().NotBeNull().And.HaveCount(2);

これに:

config.Ensure(c => c.Active,
              c => c.RootServiceName == "test-animals",
              c => c.MethodValidation == MethodValidation.afterUriValidation,
              c => c.Endpoints != null && c.Endpoints.Count() == 2);

これがクラスです。誰かの出発点として役立つことを願っています;-D

using System;
using System.Linq.Expressions;
using NUnit.Framework;

namespace Icodeon.Hotwire.Tests.Framework
{
    public static class QuickAssert
    {
        public static void Ensure<TSource>(this TSource source, params Expression<Func<TSource, bool>>[] actions)
        {
            foreach (var expression in actions)
            {
                Ensure(source,expression);
            }
        }

        public static void Ensure<TSource>(this TSource source, Expression<Func<TSource, bool>> action)
        {
            var propertyCaller = action.Compile();
            bool result = propertyCaller(source);
            if (result) return;
            Assert.Fail("Property check failed -> " + action.ToString());
        }
    }
}

私がEnsureを書いた時点では、コードコントラクトはVisual Studio 2010でサポートされていませんでしたが、現在はhttp://msdn.microsoft.com/en-us/magazine/hh148151.aspxを参照してください。

于 2013-01-04T11:26:30.653 に答える
1

これが式を使用するものです。それはかなり些細なことなので、誰もがこれの独自の実装を持っているようです...

于 2010-08-03T02:21:57.027 に答える
1

Bytes2you.ValidationProject )を試すことができます。これは、高速で、拡張性があり、直感的で使いやすいC#ライブラリであり、引数の検証に流暢なAPIを提供します。.NETアプリケーションに防御プログラミングを実装するために必要なすべてのものを提供します。

于 2014-11-17T21:32:31.057 に答える