gpt4 book ai didi

c# - C# 中存在对相同泛型的更多类约束的替代方案?

转载 作者:太空宇宙 更新时间:2023-11-03 23:12:52 25 4
gpt4 key购买 nike

考虑以下结构:

public class A
{
public int Prop { get; set; }
}

public class B
{
public int Prop { get; set; }
}

public static class Extension
{
public static int Sum<T>(T template, int input) where T : A
{
return template.Prop + input;
}
}

可以计算Propinput 的总和,但前提是泛型T 类型是A

有没有办法在不改变类结构的情况下,让这个方法对AB 都有效?

(我知道它们可以派生自相同的基类/接口(interface)并将泛型定义为基类型,但我不能修改它们)。我试过:

public static int Sum<T>(T template, int input) where T : A
where T : B
{
return template.Prop + input;
}

但这不起作用,它会生成:

A constraint clause has already been specified for type parameter 'T'. All of the constraints for a type parameter must be specified in a single where clause.

编辑

我没有必要寻找具有两个独立类类型的通用参数,但我正在寻找一种方法,将与这两种类型相同的功能分配给要实现的单个参数。

最佳答案

您为什么一开始就使用泛型?只需使用方法重载:

public static int Sum(A template, int input) { ... }

public static int Sum(B template, int input) { ... }

为避免重复代码,只需委托(delegate)实现即可:

public static int Sum(A template, int input) { return add(A.Prop, input); }
public static int Sum(B template, int input) { return add(B.Prop, input); }
private static int add(int prop, int input) { ... }

关于c# - C# 中存在对相同泛型的更多类约束的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38396360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com