微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。