我正在尝试向通用方法添加一个约束,以便它检查 ValueTypes、Strings 或 Nullable 值类型。
问题是:
- 值类型是struts
- 字符串是不可变的引用类型
- nullable 是值类型,但不会在“where S : struct”类型约束中被接受。
那么有人知道我是否可以在通用约束中接受这些类型并且只接受这些类型?
问题是我试图接受一个Expression<Func<T, S>
参数,该参数将代表给定对象的这些类型的属性。
该功能将类似于以下内容(注意代码没有任何意义,只是快速了解我正在寻找的东西):
public class Person
{
public string Name {get; set;}
public DateTime? DOB {get; set;}
public int NumberOfChildren {get; set;}
public Car CurrentCar {get; set;}
}
---
internal void MyGenericMethod<T, S>(T myObject, Expression<Func<T, S> property){...}
Person myPerson = new Person();
MyGenericMethod(myPerson, p => p.Name); //S would be a string
MyGenericMethod(myPerson, p => p.DOB); //S would be a DateTime?
MyGenericMethod(myPerson, p => p.NumberOfChildren); //S would be a struct
上面的三个调用都应该被接受,但不是下面的:
MyGenericMethod(myPerson, p => p.CurrentCar); //S would be a class and shouldn't compile
提前致谢
更新:感谢安东和马克。MyGenericMethod 有 4 个不同的签名接受额外的参数,这就是为什么我不喜欢为现有的 4 个创建 3 个不同的(结构、可空、字符串)的想法......这将是一场噩梦!