首页 / C# / c#-反射中的隐式类型转换
c#-反射中的隐式类型转换
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-反射中的隐式类型转换,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1635字,纯文字阅读大概需要3分钟。
内容图文
![c#-反射中的隐式类型转换](/upload/InfoBanner/zyjiaocheng/652/a2c236a3270441929a0a4402b72c2bcc.jpg)
因此,我写了一些代码来帮助快速在业务对象和视图模型之间进行转换.如果您有兴趣或需要知道,请不要拉皮条我自己的博客,但是请拨you can find the details here.
我遇到的一个问题是,我有一个自定义的集合类型ProductCollection,我需要在模型中将其转变为string [] in.显然,由于没有默认的隐式强制转换,因此我的合同转换器中出现异常.
因此,我认为我将编写下一部分代码,这应该可以解决问题:
public static implicit operator string[](ProductCollection collection) {
var list = new List<string>();
foreach (var product in collection)
{
if (product.Id == null)
{
list.Add(null);
}
else
{
list.Add(product.Id.ToString());
}
}
return list.ToArray();
}
但是,它仍然会因相同的强制转换异常而失败.我想知道这与反思有关吗?如果是这样,我在这里能做些什么?我也愿意接受建筑解决方案!
解决方法:
首先,隐式运算符允许进行隐式转换(无强制转换指令).显式运算符对演员进行操作.
尽管如此,这不是真正的问题.运算符不是多态的(它们是重载的,不会被覆盖);也就是说,为了利用重载的运算符,必??须在定义它的类的上下文中引用一个类.
例如:
public class Foo
{
public static implicit operator Bar(Foo foo) { return new Bar(); }
}
public class Bar { }
...
void Baz()
{
Foo foo = new Foo();
Bar bar = foo; // OK
object baz = foo;
bar = baz; // won't compile, there's no defined operator at the object level
bar = (Bar)baz; // will compile, but will fail at runtime for the same reason
}
在不知道您在做什么以及如何做的情况下,我无法提供有意义的替代方案.但是,有些想法:
>在实体上覆盖ToString(如果您不想使用ToString,则对您的实体使用ToString(或为您的实体使用通用的基类/接口),然后以一般方式枚举集合以构造您的字符串数组
>在您的集合上提供ToStringArray函数(通过公共基类或接口),该函数执行类似的操作
最大的一点是不要为此目的使用运算符.他们不会帮助您.
内容总结
以上是互联网集市为您收集整理的c#-反射中的隐式类型转换全部内容,希望文章能够帮你解决c#-反射中的隐式类型转换所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。