首页 / C# / 具有条件语句的C#通用类型参数
具有条件语句的C#通用类型参数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了具有条件语句的C#通用类型参数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1563字,纯文字阅读大概需要3分钟。
内容图文
![具有条件语句的C#通用类型参数](/upload/InfoBanner/zyjiaocheng/784/c84e15b2db234115895e85764f3132ba.jpg)
我正在使用C#中的API和一些类,如下所示.有两个消息类MessageA和MessageB以及许多字段类FieldA,FieldB等.字段类都属于基类Field.
消息将包含可以作为访问的各种字段
msgA.getField(FieldX字段)
(将FieldX条目(如果存在)从msgA复制到字段)和
msgB.set(FieldX字段).
还有
msgA.isSetField(FieldX字段)
确保消息包含FieldX类型的字段.
我需要编写一个方法来获取MessageA并将一些字段复制到MessageB.我现在有一个工作函数,但它有一大堆语句,如
FieldX fieldX = new FieldX();
if(msgA.isSetField(fieldX))
{
msgA.getField(fieldX);
msgB.set(fieldX);
}
这对我来说似乎很愚蠢,所以我想写一个单独的方法来做到这一点.我是C#和泛型类型的新手,所以我不太确定最好的方法.在尝试了很多事情之后,我写了
private void SetMessageB<T>(MessageA msgA, MessageB msgB, Field field) where T : Field
{
var field_t = field as T;
if (field_t != null)
{
if (msgA.isSetField(field_t))
{
msgA.getField(field_t);
msgB.set(field_t);
}
}
}
但这不起作用.在内部条件语句中,field_t的类型转换为int.有意义的是为什么会发生这种情况(即,这些函数不能将任何类型作为参数,因此编译器无法确定它是否每次都能工作).但我想知道是否有人可以指出解决问题的好方法.随意链接到MSDN文章或教程或诸如此类的东西.谢谢你的帮助.
解决方法:
如果你的消息对象的方法也是通用的,那么在这里使用泛型是有意义的:
class Message
{
bool isSetField<TField>(TField field) where TField : Field { ... }
void getField<TField>(TField field) where TField : Field { ... }
void set<TField>(TField field) where TField : Field { ... }
}
那么你的方法可以是真正的通用:
private void SetMessageB<T>(Message msgA, Message msgB, T field) where T : Field
{
if (msgA.isSetField(field))
{
msgA.getField(field);
msgB.set(field);
}
}
内容总结
以上是互联网集市为您收集整理的具有条件语句的C#通用类型参数全部内容,希望文章能够帮你解决具有条件语句的C#通用类型参数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。