我正在使用 C# API,有以下几个类。其中有两个消息类MessageA
和MessageB
,以及一些字段类FieldA
、FieldB
等。所有字段类都属于基类Field
。
一个消息将包含各种字段,可以通过以下方式访问:
msgA.getField(FieldX field)
(将msgA
中的FieldX
条目(如果存在)复制到field
),以及
msgB.set(FieldX field)
.
还有
msgA.isSetField(FieldX field)
确保消息包含类型为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文章、教程或其他资料。感谢您的任何帮助。
T field
而不是Field field
吗?这样可以减少强制类型转换的需要。 - drharris