2

クラス内で次のことを達成しようとしています。

public void Test(var input)
{
    WriteToFile(input.ToString());
}

private void WriteToFile(string input)
{
    .....
}

ただし、「var」ステートメントはクラス内では使用できません。だから、上記と同じことを達成する最も簡単な方法は何だろうと思っています。

1 つの解決策は、値の型ごとに関数を作成することですが、それは必要以上に面倒なことです。

public void Test(string input)
{
    WriteToFile(input);
}

public void Test(int input)
{
    WriteToFile(input.ToString());
}

public void Test(double input)
{
    WriteToFile(input.ToString());
}

private void WriteToFile(string input)
{
    .....
}

編集:もう少し考えてみると、これは実際には私の問題に対する答えではないことがわかりました。その背後にあるより多くの考えを持つ新しい質問を投稿しています。他の誰かがこれを役に立つと思うかもしれないので、私はこの質問を削除するつもりはありません.

4

4 に答える 4

8

それを渡しobjectて呼び出すだけToString()です:

public void Test(object input)
{
    WriteToFile(input.ToString());
}
于 2013-07-03T11:09:06.200 に答える
6
public void Test<T>(T input)
{
    WriteToFile(Convert.ToString(input));
}
于 2013-07-03T11:10:52.670 に答える
3

あなたは使用しようとすることができます public void Test(object input)

tostring メソッドを呼び出す前に (input!= null) をテストするかもしれません

于 2013-07-03T11:11:13.233 に答える
0

関数 Test がオブジェクト パラメーターを受け入れるようにし、その中の型を決定した後に続行します。

public void Test(object input)
{
      var res = (dynamic)null;
      if (input.GetType() == typeof(String)))
      {
            res = input.ToString();
            WriteToFile(res);
      }
}

編集:なぜこの方法ですか?

将来、サポートを他のタイプにも拡張する必要がある場合は、以下のようなことを行うことができます (float、double、long、int ... についての質問があるため)。

public void Test(object input)
{
      var res = (dynamic)null;
      if (input.GetType() == typeof(String)))
      {
            res = input.ToString();
            WriteToFile(res);
      }
      if (input.GetType() == typeof(float)))
      {
           //do some other operations here...
      }
}

これを実装するさらに良い方法は、「is」演算子を使用することです。

      if (input is string)
      {
            res = input.ToString();
            WriteToFile(res);
      }
于 2013-07-03T11:11:15.143 に答える