【发布时间】:2021-05-18 16:48:34
【问题描述】:
我想要一种符合人体工程学的方式来声明指向其他程序集中方法的本地指针。例如,我有一个用 VB.Net 编写的非常有用的函数(是的,我知道它是 VB,但它具有历史意义并且在广泛使用的程序集中),它是:
Public Function IIN(oValue As Object, ParamArray oValues() As Object) As Boolean
Dim iA As Integer
For iA = oValues.GetLowerBound(0) To oValues.GetUpperBound(0)
If oValue = oValues(iA) Then
Return True
End If
Next
Return False
End Function
这是由 SQL IN 关键字启发的。它非常有用。它允许我使用这样的语句:
if (Dolphin.modGeneral.IIN(oResult.DataType.Code, "BIGINT", "DECIMAL", "FLOAT", "INT", "MONEY", "SMALLINT", "TINYINT"))
{
这比:
if ((oResult.DataType.Code == "BIGINT") ||
(oResult.DataType.Code == "DECIMAL") ||
(oResult.DataType.Code == "FLOAT") ||
(oResult.DataType.Code == "INT") ||
(oResult.DataType.Code == "MONEY") ||
(oResult.DataType.Code == "SMALLINT") ||
(oResult.DataType.Code == "TINYINT"))
{
我非常想让这个更简洁,以便我可以这样做:
if (IIN(oResult.DataType.Code, "BIGINT", "DECIMAL", "FLOAT", "INT", "MONEY", "SMALLINT", "TINYINT"))
{
它删除了程序集引用,但我想这样做而不在本地声明整个函数。
我曾经能够用 C 做一些事情(很多年前),对于这个例子来说,这相当于:
#define IIN Dolphin.modGeneral.IIN
由编译器处理,实际上是预编译文本替换。但是,在 C# 中,我必须这样做:
private delegate bool delIIN(object oValue, params object[] oValues);
private delIIN IIN;
然后在该类的所有构造函数中,我还需要有一个赋值语句,因此:
IIN = Dolphin.modGeneral.IIN;
经过相当复杂的设置,我的实际问题是:有没有更简洁的方法可以声明这样的函数的快捷方式,更像是 C 定义语句,而不是必须声明委托类型、委托函数然后拥有给所有构造函数中的委托函数赋值?
【问题讨论】:
-
C# 中的大多数集合类型都有一个 Contains 方法,该方法与您在此处所做的完全一样,并且效率更高。您可以在数组上使用 Array.Exists 方法。