C# 中的字符串扩展问题

Issue with String Extension in C#

我正在尝试做一个简单的字符串扩展,将更改分配给原始字符串(如 toUpper)。在这种情况下,该方法将内容分配给第二个参数,如果它不是白色的话 space 也不是 null...否则,它将保留当前值,或者将空值分配给“”。所以,我想要它:

somerecord.Property1.func(someobj.property);
somerecord.Property2.func(someobj.otherproperty);
somerecord.Property3.func(someobj.anotherproperty);

虽然我的代码看起来像

    public static string func(this String str, string replacement)
    {
        if (!String.IsNullOrWhiteSpace(replacement)) {
            str = replacement;
            return replacement;
        }
        else
        {
            if(str == null)
              str = "";
            return "";
        }
    }

我想将 this 设置为 ref 但我不能。关于如何干净地实施它有什么想法吗?

不要使该方法成为扩展方法,实现常规静态方法:

public static void func(ref string str, string replacement)
{
    if (!String.IsNullOrWhiteSpace(replacement)) {
        str = replacement;
    }
    else
    {
        if(str == null)
          str = "";
    }
}

但是请注意,您的用例仍然不起作用,您不能将 属性 作为 ref 参数传递给开头:

class Foo
{
    public string someVariable;
    public string SomeProperty { get; }
}

var foo = new Foo();
func(ref foo.someVariable, ""); //ok
func(ref foo.SomeProperty, ""); //compile time error