如何在 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
}
我有相同的方法在我的项目中针对不同的 类:
重复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
}