这是类测试
public class Test
{
public string mystr;
}
我从方法中调用它:
string my = "ABC";
Test test = new Test();
test.mystr = my;
test.mystr = "";
上面的位代码的结果是:my = "ABC"
和test.mystr = ""
更改时如何设置my
为空字符串?""
test.mystr = ""
如果我理解正确,您希望变量my
和test.myStr
被链接,所以如果一个改变,另一个改变?
答案很简单:不可能!
字符串是不可变的类。多个引用可以指向一个字符串实例,但是一旦修改了这个实例,就会使用新值创建一个字符串实例。所以一个新的引用被分配给一个变量,而其他变量仍然指向其他实例。
有一种解决方法,但我怀疑您不会对此感到满意:
public class Test
{
public string mystr;
}
Test myTest1 = new Test { myStr = "Hello" };
Test myTest2 = myTest1;
现在,如果您更改myTest1.myStr
,该变量myTest2.myStr
也将被修改,但这仅仅是因为myTest1
和myTest2
是相同的实例。
还有其他类似的解决方案,但都归结为同一方面:持有对字符串的引用的类。
.NET 中的字符串是不可变的,不能那样工作。您可以尝试的一种方法是对字符串使用可变包装器。
public class StringReference
{
public string Value {get; set;}
public StringReference(string value)
{
Value = value;
}
}
public class Test
{
internal StringReference mystr;
}
StringReference my = new StringReference("ABC");
Test test = new Test();
test.mystr = my;
test.mystr.Value = "";
// my.Value is now "" as well
string my = "ABC";
Test test = new Test();
Test
请注意,您的class 和 string之间没有关系my
。我不完全确定您要达到的目标,但我们可以这样做:
public class Test
{
private string _mystr;
private Action<string> _action;
public Test(Action<string> action)
{
_action = action;
}
// Let's make mystr a property
public string mystr
{
get { return _mystr; }
set
{
_mystr = value;
_action(_mystr);
}
}
}
现在你可以这样做:
string my = "ABC";
Test test = new Test((mystr) => { if(string.IsNullOrEmpty(mystr)) my = ""; });
test.mystr = my;
test.mystr = "";