-2

実行時に文字列に適用される文字列メソッドを動的に渡すにはどうすればよいですか。元。

Private String Formatting(String Data, String Format)

通過するString S1 = "S1111tring Manipulation"format = Remove(1,4)- 舞台裏S1.Remove(1,4)で「文字列操作」が発生します

または、通過して舞台裏を通過するString S1 = "S1111tring Manipulation"と、format = ToLower()S1.ToLower()"s1111tring manipulation"

PadLeft(25,'0')、などPadRightの有効なメソッドを渡すことができるはずですReplace...

完全な例をいただければ幸いです

これは私が試したもので、うまくいきません

using System.Reflection;
string MainString = "S1111tring Manipulation";
string strFormat = "Remove(1, 4)";
string result = DoFormat(MainString, strFormat);

private string DoFormat(string data, string format)
        {
            MethodInfo mi = typeof(string).GetMethod(format, new Type[0]);
            if (null == mi)
                throw new Exception(String.Format("Could not find method with name '{0}'", format));

            return mi.Invoke(data, null).ToString();
        } 

エラーがスローされます ('Remove(1, 4)' という名前のメソッドが見つかりませんでした) - 続行する方法がわかりません

4

2 に答える 2

2

リフレクションを見てください。ユーザーが提供したテキストの解析を除いて、それを使用して記述しているものを基本的に実装できます。

そこで使用した簡単な例は、次のようになります。

var method = "ToLower()";
var methodInfo = typeof(String).GetMethod(method);
var string = "foo";
string.GetType().InvokeMember(....);
于 2012-07-24T13:03:23.587 に答える
0

2番目の文字列パラメータの代わりに列挙型を使用することを検討してください。型安全性にも役立ちます。

public enum StringManipulationType
{
  ToLower,
  ToUpper
}

次に、使用していた操作方法を次のように書き直します。

private string Formatting(String data, StringManipulationType manipulationType)
{
  switch (manipulationType)
  {
    case StringManipulationType.ToLower:
      return data.ToLower();
    case StringManipulationType.ToUpper:
      return data.ToUpper();
    case default:
      throw new ArgumentException();
  }
}

以前の「文字列パラメータ」があったすべての場所で、次のように列挙型で変更します。

于 2012-07-24T13:10:15.517 に答える