C# 中的比较运算符

发布于 2024-12-05 20:42:43 字数 356 浏览 2 评论 0原文

我有一个模糊的要求。我需要比较两个值。这些值可以是数字或字符串。

我想执行这些操作 >、<、==、<>、>=、<=

在我的方法中,我将传递参数 1、参数 2 和上面的运算符。

如何在 .NET 2.0 中有效地基于运算符比较两个值。

对于字符串和整数输入值,我的方法应该简化。

输入值示例:

param1  |  param2  |  operator
------------------------------
David      Michael       >
1          3             ==

I have a vague requirement. I need to compare two values. The values may be a number or a string.

I want to perform these operations >, <, ==,<>, >=,<=

In my method I will pass, the parameter1, parameter 2 and the operators of above.

How can compare the two values based on the operator as effectively in .NET 2.0.

My method should be as simplified for both String and integer input values.

Sample Input Value:

param1  |  param2  |  operator
------------------------------
David      Michael       >
1          3             ==

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情释 2024-12-12 20:42:43

如果两个参数始终具有相同类型,则可以使用通用方法,其中两个参数均实现 IComparable(.NET 2.0 中引入)

public int CompareItems<T>(T item1, T item2) where T: IComparable<T>
{
    return item1.CompareTo(item2);
}

(您可以解释以下结果CompareTo() 取决于您在实现中传递的运算符)

Provided both parameters are always of the same type you could use a generic method where both parameters implement IComparable<T> (introduced in .NET 2.0)

public int CompareItems<T>(T item1, T item2) where T: IComparable<T>
{
    return item1.CompareTo(item2);
}

(You can interpret the result of CompareTo() depending on the operator your pass in your implementation)

葬花如无物 2024-12-12 20:42:43

如果您必须/想要构建通用版本,则需要将比较作为函数/lambda 传递 - 不可能以通用方式使用运算符。像这样的东西:

class OpComparer<T>
{
  Func<T,T,bool> operation;
  public OpComparer(Func<T,T,bool> op)
  {
    operation = op;
  }

  int PerformOp(T item1, T item2) 
  {
    return operation(item1, item2);
  }
}

...
var comparerLess = new OpCompared<String>((a,b)=> a < b );
var result = comparerLess.PerformOp("aaa", "bbb");

If you have to/want to build generic version you need to pass comparison as function/lambda - it is not possible to use operators in generic way. Somithing like:

class OpComparer<T>
{
  Func<T,T,bool> operation;
  public OpComparer(Func<T,T,bool> op)
  {
    operation = op;
  }

  int PerformOp(T item1, T item2) 
  {
    return operation(item1, item2);
  }
}

...
var comparerLess = new OpCompared<String>((a,b)=> a < b );
var result = comparerLess.PerformOp("aaa", "bbb");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文