我希望能够编写扩展方法,这样我可以说:

lines.ForceSpaceGroupsToBeTabs();

代替:
lines = lines.ForceSpaceGroupsToBeTabs();

但是,当前输出以下代码:
....one
........two

代替:
Tone
TTtwo

我必须在以下代码中进行哪些更改才能使其输出:
Tone
TTtwo

(请注意,为了提高可见性,请使用. = space, T = \t):
using System;
using System.Collections.Generic;

namespace TestExtended82343
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> lines = new List<string>();
            lines.Add("....one");
            lines.Add("........two");

            lines.ForceSpaceGroupsToBeTabs();

            lines.ForEach(l => Console.WriteLine(l));
            Console.ReadLine();
        }
    }

    public static class Helpers
    {
        public static void ForceSpaceGroupsToBeTabs(this List<string> originalLines)
        {
            string spaceGroup = new String('.', 4);
            List<string> lines = new List<string>();
            foreach (var originalLine in originalLines)
            {
                lines.Add(originalLine.Replace(spaceGroup, "T"));
            }
            originalLines = lines;
        }
    }
}

最佳答案

您必须修改传递给扩展方法的List<string>的内容,而不是保存列表引用的变量:

public static void ForceSpaceGroupsToBeTabs(this List<string> lines)
{
    string spaceGroup = new String('.', 4);
    for (int i = 0; i < lines.Count; i++)
    {
        lines[i] = lines[i].Replace(spaceGroup, "T");
    }
}

关于c# - 如何获得扩展方法来更改原始对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2326734/

10-12 06:47