我创建了只包含一个依赖项属性的简单类型“Text”返回字符串。为了便于从字符串转换为我的类型,我编写了以下代码:
public static implicit operator string(StringDP sdp)
{
return sdp.Text;
}
public static implicit operator StringDP(string str)
{
return new StringDP(str);
}
我希望从List<string>
到List<myType>
进行类似的转换。我能做到吗?或者我必须使用这样的东西:
public List<string> Convert(List<myType> lst);
public List<myType> Convert(List<string> lst);
谢谢!
答案 0 :(得分:1)
不,这是不可能的。来自the documentation:
要转换的参数类型或转换结果的类型(但不是两者)都必须是包含类型。
假设的隐式转换中涉及的两种类型都是泛型List<T>
类的具体版本。由于您无法自行为List<T>
课程添加运算符,并且由于implicit
运算符要实现您的目标所必需的,因此无法实现完成。
如果没有更多背景信息,我承认我无法对您所定义的string
的隐式转换进行专业评论。但总的来说,您应该对implicit
次转化非常谨慎。假设您的类型的隐式转换符合&#34; safe&#34;准则,那么整个类型列表的转换将是&#34;罚款&#34;。
可以使用自定义方法(例如示例)完成此转换。或者您可以使用LINQ或List<T>.ConvertAll()
方法。 E.g:
List<string> listOfString = listOfMyType.Select(item => (string)item).ToList();
List<myType> listOfMyType = listOfString.ConvertAll(item => (myType)item);
// etc.
然而,即使在那里,我也建议你应该小心你如何使用这样的东西。转换单个值实例是一回事,但转换整个集合需要相当多的开销,而且很可能不是解决问题的正确方法。
不知道实际问题是什么 ,我无法提供替代方案。只是建议你非常警惕你似乎要走的设计路径。