0

文字列値を保持する基本クラスを開発し、この値を int 値として格納する方法を変換規則に渡したいと考えています。

私が完全に間違っていない場合、これはある種のデリゲートを使用して可能になるはずです。残念ながら、インターネットで何を検索すればよいのか、何から始めればよいのかわかりません。

簡単な例を次に示します。

    class MyClass
    {
      public string InputString { get; private set; }
      public int OutputValue { get; set; }
      public MyClass(string inputString)
      {
        this.InputString = inputString;
      }

      //I suspect that I need a method here taking some kind of delegate?
    }

    MyClass mC = new MyClass("abcd");

    //here I now want to pass something to mC saying that each character should 
    // be transformed to its ascii value and be added to a total value

    //or another object should transform abcd interpreting it hexadecimal
4

3 に答える 3

2

次のようなものが必要ですFunc<string, int>

Func<string, int> converter = (theString) => int.Parse(theString);

次にFunc<string, int>、おそらくコンストラクターで型を取得し、変換する必要があるときにそれを呼び出します。

converter(InputString);

stringこのデリゲートの実装は、 を取り、を返す限り、好きなようにできますint

可能な方法 (各文字の ASCII 値を具体的に示していない):

class MyClass
{
    private Func<string, int> _valueConverter;

  public string InputString { get; private set; }
  public int OutputValue { get { return _valueConverter(InputString); } }

  public MyClass(string inputString, Func<string, int> valueConverter)
  {
    _valueConverter = valueConverter;
    this.InputString = inputString;
  }
}

// As a lambda
MyClass mC = new MyClass("2", input => int.Parse(input));

Func上に示したラムダ式またはメソッド グループのいずれかとして、パラメータを満たすために何かを指定できます。

private static int AMethodThatMatchesTheFuncSignature(string value)
{
    return 42;
}

var mC = new MyClass("2", AMethodThatMatchesTheFuncSignature);

これまでに見たことがない場合はFunc<T1, T2>、フレームワークによって提供される既製のデリゲートにすぎません (多くの引数まで、引数なしで定義されたFuncとの型が定義されています。すべてが void を返し、すべてが最終的に定義された型を返します)。ActionActionFuncTResult

于 2013-05-07T15:31:33.060 に答える