0

スペース文字をアンダースコアに変換するメソッド(拡張メソッド)を文字列に追加したいのですが、コードをデプロイしましたが、なぜ機能しないのですか?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string name = "moslem";
            string.SpaceToUnderScore(name);
        }

        public static string SpaceToUnderScore(this string source)
        {
            string result = null;
            char[] cArray = source.ToArray();
            foreach (char c in cArray)
            {
                if (char.IsWhiteSpace(c))
                {
                    result += "_";
                }
                else
                {
                    result += c;
                }
            }
            return result;
        }
    }
}

うまくいかないのはなぜですか?

4

4 に答える 4

3

最初に拡張メソッドを静的クラスに配置し、次に次のように呼び出します。name.SpaceToUnderScore()

var newstr = "a string".SpaceToUnderScore();


public static class SomeExtensions
{
    public static string SpaceToUnderScore(this string source)
    {
        return new string(source.Select(c => char.IsWhiteSpace(c) ? '_' : c).ToArray());
        //or
        //return String.Join("",source.Select(c => char.IsWhiteSpace(c) ? '_' : c));
    }
}
于 2012-10-07T16:23:34.180 に答える
0

拡張メソッドは、静的クラスで記述する必要があります。

public static class StringExtension
{
    public static string SpaceToUnderScore(this string source)
    {
        string result = null;
        char[] cArray = source.ToArray();
        foreach (char c in cArray)
        {
            if (char.IsWhiteSpace(c))
            {
                result += "_";
            }
            else
            {
                result += c;
            }
        }
        return result;
    }
}
于 2012-10-07T16:18:12.233 に答える
0

拡張メソッドのコードを変更せずに、拡張メソッドを静的クラスに追加します。

public static class MyExtensions // Name this class to whatever you want, but make sure it's static.
{
    public static string SpaceToUnderScore(this string source)
    {
        string result = null;
        char[] cArray = source.ToArray();
        foreach (char c in cArray)
        {
            if (char.IsWhiteSpace(c))
            {
                result += "_";
            }
            else
            {
                result += c;
            }
        }
        return result;
    }
}

次に、次のように呼び出します。

string name = "moslem";
string underscoreName = name.SpaceToUnderScore(); // Omit the name parameter (prefixed with this) when called like this on the string instance. 

// This would work to:
string underscoreName = MyExtentions.SpaceToUnderScore(name);

拡張メソッドが見つからない場合は、静的クラスの名前空間を使用していることを確認してください。

于 2012-10-07T16:21:30.080 に答える
0
public static class MyStringExtenstionClass
{

    public static string SpaceToUnderScore(this string source)
    {
        string result = null;
        char[] cArray = source.ToArray();
        foreach (char c in cArray)
        {
            if (char.IsWhiteSpace(c))
            {
                result += "_";
            }
            else
            {
                result += c;
            }
        }
        return result;
    }
}

そしてこのように

 string name = "John Doe";
 name = name.SpaceToUnderScore(); //no argument and called on instance of string
于 2012-10-07T16:21:52.063 に答える