C# 使用out参数时,使用lambda函数防止代码复制

C# 使用out参数时,使用lambda函数防止代码复制,c#,.net-4.5,lambda,out,C#,.net 4.5,Lambda,Out,我必须解析包含各种数字数据类型的许多文本框的内容(int,double,…)。 为了有效,文本不仅必须是可解析的int,或dobule或其他类型,还必须在一定范围内 我有这个功能: private static bool validateDoubleInRange(TextBox txtBox, double rangeMin, double rangeMax, string errorMessage, ErrorProvider ep, out doub

我必须解析包含各种数字数据类型的许多文本框的内容(
int
double
,…)。 为了有效,文本不仅必须是可解析的
int
,或
dobule
或其他类型,还必须在一定范围内

我有这个功能:

    private static bool validateDoubleInRange(TextBox txtBox,
        double rangeMin, double rangeMax,
        string errorMessage, ErrorProvider ep, out double? result)
    {
        double tmpResult;
        if (double.TryParse(txtBox.Text, out tmpResult))
        {
            // Ok it's a double but is it valid?
            if (tmpResult > rangeMin && tmpResult < rangeMax)
            {
                // Yes it is
                result = tmpResult;
                ep.SetError(txtBox, string.Empty);
                return true;
            }
            else
            {
                // No
                result = null;
                ep.SetError(txtBox, errorMessage);
                return false;
            }
        }
        else
        {
            // Not even a double
            result = null;
            ep.SetError(txtBox, errorMessage);
            return false;
        }
    }
前面的函数将包含类型为
GenericTryParse

调用(
int
version)将变成:

validateGenericNumberInRange(txtBox, 0, 100, errorMessage, ep,
 (TextBox tb, out int r) => { return int.TryParse(tb.Text, out r)?true:false; },
 out result);
问题是,我仍然绑定到
out
参数类型,如果不指定
out
结果类型,我无法(或不知道如何)声明
GenericTryParse

有没有办法解决这个问题,你会怎么做?

你正在寻找:

private委托bool GenericTryParse(TextBox txtBox,out T result);

从来没有任何理由写
?真:假
@SLaks你需要什么?这是一种不好的做法还是错误的做法?(我对c有点陌生)这没用。你已经有一个布尔值了。@SLaks哦。。。赞成。。。我现在觉得很傻:)
validateGenericNumberInRange(txtBox, 0, 100, errorMessage, ep,
 (TextBox tb, out int r) => { return int.TryParse(tb.Text, out r)?true:false; },
 out result);
private delegate bool GenericTryParse<T>(TextBox txtBox, out T result);