C# 如何创建表示值的类或类集,可以是整数、字符串或字符串列表
我如何在类中表示表示表示值的东西 此值将用于在上写入比较操作,如EqualTo、GreaterThan等 现在需要注意的是,值有时可能是整数、字符串,甚至是整数或字符串的列表 我如何在类或类组(可能从基类继承)中表示这一点 然后我可以编写一个方法,如:C# 如何创建表示值的类或类集,可以是整数、字符串或字符串列表,c#,design-patterns,C#,Design Patterns,我如何在类中表示表示表示值的东西 此值将用于在上写入比较操作,如EqualTo、GreaterThan等 现在需要注意的是,值有时可能是整数、字符串,甚至是整数或字符串的列表 我如何在类或类组(可能从基类继承)中表示这一点 然后我可以编写一个方法,如: EqualTo(IValue value, IValue otherValue) 如果我传入一个字符串或字符串列表、datetime或datetime列表并相应地返回true/false,那么这个EqualTo方法现在如何处理呢? 注: 问题是
EqualTo(IValue value, IValue otherValue)
如果我传入一个字符串或字符串列表、datetime或datetime列表并相应地返回true/false,那么这个EqualTo方法现在如何处理呢?
注:
问题是,我将根据数据库中的数据构建这些对象,因此实际的数据类型、值或值等。另一种方法是确保您的类型实现并使用其方法。您可以编写:
EqualTo<T>(T value1, T value2) where T : IEquatable<T>
Equals()
调用检查相等性,并将值强制转换为大于/小于的非泛型IComparable
类型。这并不理想,但它应该能起作用我更新了我的问题,因为数据将通过数据库生成,所以这本质上是动态的。@codecompleting:好的,这完全改变了情况。你知道这些类型是否会相同吗?您不想开始将
int
与字符串列表进行比较…很抱歉,我的错误。是的,你可以假设类型相同(假设你的意思是在列表/集合中)。@codecompleting:好的,我已经编辑了我的答案。基本上,这将是一个痛苦:(@codecompleting:那么为什么不打开该值,并按照我的第一个版本调用一个泛型方法呢?
Compare<T>(T value1, T value2) where T : IComparable<T>
SequenceEqualTo<T>(IEnumerable<T> sequence1, IEnumerable<T> sequence2)
where T : IEquatable<T>
SequenceCompare<T>(IEnumerable<T> sequence1, IEnumerable<T> sequence2)
where T : IComparable<T>
if (value1.GetType().IsGenericType &&
value1.GetType().GetGenericTypeDefinition() == typeof(List<>))
{
// Handle this case separately, definitely in another method.
// It'll be a pain.
}