如何在 C# 的方法中访问通用类型的通用 属性(使用约束?)

How do you access a common property of generic type inside a method in C# (using constraints?)

我有相同的方法在我的项目中针对不同的 类:

重复
public Task DoSomething(Class1 class)
{
    // do stuff
    var commonProperty = class.commonProperty 
    // do stuff
}

并且在不同的服务中

public Task DoSomething(Class2 class)
{
    // do stuff
    var commonProperty = class.commonProperty 
    // do stuff
}

我了解到我可以使用泛型类型,并且相信这将是应用它的好地方 - 例如:

public Task DoSomething<T>(T class) 
{
    // do stuff
    var commonProperty = class.commonProperty 
    // do stuff
}

但我无法访问 属性,也找不到如何为约束添加多个选项。

首先您必须创建一个对象层次结构:

public class BaseClass
{
    public object CommonProperty { get; set; }
}

public class Class1 : BaseClass
{
}

public class Class2 : BaseClass
{
}

然后你可以使用where generic type constraint来指定泛型类型:

public Task DoSomething<T>(T class) where T : BaseClass
{
    // do stuff
    var commonProperty = class.commonProperty 
    // do stuff
}