gpt4 book ai didi

c# - C#中的隐式转换而不创建新对象

转载 作者:行者123 更新时间:2023-11-30 16:43:31 25 4
gpt4 key购买 nike

我正在尝试为一个对象实现一些隐式转换。目前我正在这样做:

public class PathSelector 
{
private string _path = null;
public string Path
{
get { return _path; }
set
{
if (value != _path)
{
_path = value;
OnPropertyChanged("Path");
}
}
}

static public implicit operator string(PathSelector pathSelector)
{
return pathSelector.Path;
}

static public implicit operator PathSelector(string path)
{
return new PathSelector() { Path = path };
}
}

正如您在从 StringPathSelector 的转换中看到的那样,我正在生成一个新的 PathSelector 对象。

我是这样使用的:

public PathSelector PluginPathSelector { get; set; } = new PathSelector();
public string PluginPath
{
get
{
return PluginPathSelector;
}

set
{
PluginPathSelector = value;
}
}

我不喜欢这个解决方案的地方是,当我将字符串分配给 PathSelector 对象时,我总是创建一个新对象。这也意味着,在 PathSelector 属性中需要一个 set 部分。我想将 string 分配给已经创建的对象。有没有办法实现这个?

最佳答案

我终于明白你想做什么了。

你想要这个:

x.PluginPathSelector = "some string";

直接更改x.PluginPathSelector 中现有对象的Path 属性,而不是构造一个新的PathSelector 实例并分配给x.PluginPathSelector.

换句话说,你想要这个:

x.PluginPathSelector = "some string";

像你写的那样静静地处理:

x.PluginPathSelector.Path = "some string";

但是从静态转换运算符内部:

static public implicit operator PathSelector(string path)

而且,这不能完成,因为这是一个转换运算符。

这个声明:

x.PluginPathSelector = "some string";

是这样处理的:

  1. 首先将“some string”转换为PathSelector(通过转换运算符)
  2. 将新对象分配给属性

转换运算符实现无法到达或知道它返回的对象的目标,无论是属性还是变量或其他什么。

所以没有。这是做不到的。

如果您想避免一直构建新实例,则必须自己手动进行更改。

x.PluginPathSelector.Path = "some string";

关于c# - C#中的隐式转换而不创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44820341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com