问题描述
我想要一种符合人体工程学的方式来声明指向其他程序集中方法的本地指针。例如,我有一个用 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);
}