C# 指向不同程序集中另一个函数的指针

问题描述

我想要一种符合人体工程学的方式来声明指向其他程序集中方法的本地指针。例如,我有一个用 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,"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 定义语句,而不是必须声明一个委托类型、一个委托函数,然后为所有构造函数中的委托函数赋值?

解决方法

您应该能够像这样声明要包含静态类的所有成员:

using static Dolphin.modGeneral;

但是,您可能会发现考虑任何现有方法的效率并创建一些新方法很有用。例如:

public static bool IIN(this string value,params string[] values)
{
    return values.Contains(value);
}