我可以创建一个在C#中接受两种不同类型的泛型方法吗

Ahm*_*mad 2 c# c#-4.0

我可以创建一个接受两种类型的通用方法.在attributeTypets_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看到了这个答案,但我不确定它是否也适用于我的问题.

一些进一步的背景:这两个attributeTypets_attributeType使用xsd.exe工具已创建; 并且是部分类.

Jon*_*eet 6

不,你不能.最简单的选择是简单地写两个重载,每个类型一个.如果您想避免过多地重复自己,可以随时提取公共代码:

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)