Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建表示值的类或类集,可以是整数、字符串或字符串列表_C#_Design Patterns - Fatal编程技术网

C# 如何创建表示值的类或类集,可以是整数、字符串或字符串列表

C# 如何创建表示值的类或类集,可以是整数、字符串或字符串列表,c#,design-patterns,C#,Design Patterns,我如何在类中表示表示表示值的东西 此值将用于在上写入比较操作,如EqualTo、GreaterThan等 现在需要注意的是,值有时可能是整数、字符串,甚至是整数或字符串的列表 我如何在类或类组(可能从基类继承)中表示这一点 然后我可以编写一个方法,如: EqualTo(IValue value, IValue otherValue) 如果我传入一个字符串或字符串列表、datetime或datetime列表并相应地返回true/false,那么这个EqualTo方法现在如何处理呢? 注: 问题是

我如何在类中表示表示表示值的东西

此值将用于在上写入比较操作,如EqualTo、GreaterThan等

现在需要注意的是,值有时可能是整数、字符串,甚至是整数或字符串的列表

我如何在类或类组(可能从基类继承)中表示这一点

然后我可以编写一个方法,如:

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.
    }