我可以创建一个接受两种类型的通用方法.在attributeType
和 ts_attributeType
虽然他们有相同的字段不共享任何共同的父类.
这可能吗?或者我有什么方法可以做到这一点?
private static void FieldWriter<T>(T row)
where T : attributeType, ts_attributeType
{
Console.Write(((T)row).id + "/" + (((T)row).type ?? "NULL") + "/");
}
Run Code Online (Sandbox Code Playgroud)
我从Jon Skeet看到了这个答案,但我不确定它是否也适用于我的问题.
一些进一步的背景:这两个attributeType
和ts_attributeType
使用xsd.exe工具已创建; 并且是部分类.
不,你不能.最简单的选择是简单地写两个重载,每个类型一个.如果您想避免过多地重复自己,可以随时提取公共代码:
private static void FieldWriter(attributeType row)
{
FieldWriterImpl(row.id, row.type);
}
private static void FieldWriter(ts_attributeType row)
{
FieldWriterImpl(row.id, row.type);
}
// Adjust parameter types appropriately
private static void FieldWriterImpl(int id, string type)
{
Console.Write(id + "/" + (type ?? "NULL") + "/");
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是C#4 ,则可以使用动态类型.
(更好的解决方案是在可能的情况下为这两个类提供一个通用接口 - 并将它们重命名为同时遵循.NET命名约定:)
编辑:既然我们已经看到你可以使用部分类,你根本不需要它是通用的:
private static void FieldWriter(IAttributeRow row)
{
Console.Write(row.id + "/" + (row.type ?? "NULL") + "/");
}
Run Code Online (Sandbox Code Playgroud)