2015-03-24 67 views
1

我创建的简单类型只包含一个依赖项属性“文本”返回字符串。从字符串到我喜欢的类型容易转换我写了这个代码:列表<Type1>到列表<Type2>转换WPF

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); 

谢谢!

回答

1

不,这是不可能的。从the documentation

要转换的参数的类型或转换结果的类型(但不是两者)必须是包含类型。

您的假设隐式转换中涉及的两种类型都是泛型List<T>类的具体版本。既然你不能自己添加运营商到List<T>,那么运营商就无法实现你的目标,这是不可能的。

没有更多的上下文,我承认我无法真正评论你已经定义的string的隐式转换。但总的来说,你应该非常小心implicit转换。假设您的类型的隐式转换符合“安全”准则,那么整个类型列表的转换将是“很好”。

此转换可以使用自定义方法完成,例如您的示例。或者你可以使用LINQ或List<T>.ConvertAll()方法。例如:

List<string> listOfString = listOfMyType.Select(item => (string)item).ToList(); 
List<myType> listOfMyType = listOfString.ConvertAll(item => (myType)item); 
// etc. 

但是,即使在那里,我建议你应该小心你是如何使用类似的东西。转换价值的单个实例是一回事,但转换整个集合涉及相当多的开销,并且很可能不是解决问题的正确方法。

不知道什么是实际问题,我无法提供替代方案。只是建议你对设计路径非常警惕,你似乎要走下坡路。

相关问题