如何在c#.net中使用单变量而不是多变量

如何在c#.net中使用单变量而不是多变量,c#,C#,我使用上述代码进行十进制转换,对于所有文本框,我使用多个变量并传递这些变量,而不是所有文本框,我可以使用相同的变量吗?您可以编写一个实用方法: Decimal Basic, Da, HRA, CCA, convey, splall, deduction1, deduction2, deduction3, deduction4, deduction5; Decimal.TryParse(txtBasicSalary.Text, out Basic); Decimal.TryParse(txtDA.

我使用上述代码进行十进制转换,对于所有文本框,我使用多个变量并传递这些变量,而不是所有文本框,我可以使用相同的变量吗?

您可以编写一个实用方法:

Decimal Basic, Da, HRA, CCA, convey, splall, deduction1, deduction2, deduction3, deduction4, deduction5;
Decimal.TryParse(txtBasicSalary.Text, out Basic);
Decimal.TryParse(txtDA.Text, out Da);
Decimal.TryParse(txtHRA.Text, out HRA);
Decimal.TryParse(txtCCA.Text, out CCA);
Decimal.TryParse(txtConvey.Text, out Convey);
Decimal.TryParse(txtSplAll.Text, out splall);
Decimal.TryParse(txtdeduction1.Text, out deduction1);
Decimal.TryParse(txtdeduction2.Text, out deduction2);
Decimal.TryParse(txtdeduction3.Text, out deduction3);
Decimal.TryParse(txtdeduction3.Text, out deduction4);
Decimal.TryParse(txtdeduction5.Text, out deduction5);
drTmp["empl_Basic"] = Basic;
drTmp["empl_DA"] = Da;
drTmp["empl_HRA"] = HRA;
drTmp["empl_CCA"] = CCA;
drTmp["empl_Convey"] = convey;
drTmp["empl_Splall"] = splall;
drTmp["empl_Deduction1"] = deduction1;
drTmp["empl_Deduction2"] = deduction2;
drTmp["empl_Deduction3"] = deduction3;
drTmp["empl_Deduction4"] = deduction4;
drTmp["empl_Deduction5"] = deduction5;
并使用:

static decimal TryParse(
  string value, decimal @default = 0M)
{
    decimal ret;
    return decimal.TryParse(value, out ret) ? ret : @default;
}
下面的用法还允许对无效数据进行非零处理:

drTmp["empl_Basic"] = TryParse(txtBasicSalary.Text);
drTmp["empl_DA"] = TryParse(txtDA.Text);
drTmp["empl_HRA"] = TryParse(txtHRA.Text);

您可以编写一个实用程序方法:

Decimal Basic, Da, HRA, CCA, convey, splall, deduction1, deduction2, deduction3, deduction4, deduction5;
Decimal.TryParse(txtBasicSalary.Text, out Basic);
Decimal.TryParse(txtDA.Text, out Da);
Decimal.TryParse(txtHRA.Text, out HRA);
Decimal.TryParse(txtCCA.Text, out CCA);
Decimal.TryParse(txtConvey.Text, out Convey);
Decimal.TryParse(txtSplAll.Text, out splall);
Decimal.TryParse(txtdeduction1.Text, out deduction1);
Decimal.TryParse(txtdeduction2.Text, out deduction2);
Decimal.TryParse(txtdeduction3.Text, out deduction3);
Decimal.TryParse(txtdeduction3.Text, out deduction4);
Decimal.TryParse(txtdeduction5.Text, out deduction5);
drTmp["empl_Basic"] = Basic;
drTmp["empl_DA"] = Da;
drTmp["empl_HRA"] = HRA;
drTmp["empl_CCA"] = CCA;
drTmp["empl_Convey"] = convey;
drTmp["empl_Splall"] = splall;
drTmp["empl_Deduction1"] = deduction1;
drTmp["empl_Deduction2"] = deduction2;
drTmp["empl_Deduction3"] = deduction3;
drTmp["empl_Deduction4"] = deduction4;
drTmp["empl_Deduction5"] = deduction5;
并使用:

static decimal TryParse(
  string value, decimal @default = 0M)
{
    decimal ret;
    return decimal.TryParse(value, out ret) ? ret : @default;
}
下面的用法还允许对无效数据进行非零处理:

drTmp["empl_Basic"] = TryParse(txtBasicSalary.Text);
drTmp["empl_DA"] = TryParse(txtDA.Text);
drTmp["empl_HRA"] = TryParse(txtHRA.Text);
是的,你可以。 我曾经遇到过您的问题,并为Textbox控件实现了一个扩展。 它是一种通用方法,可以转换为十进制、int或任何值类型

drTmp["empl_HRA"] = TryParse(txtHRA.Text, 6.5M);
publicstatict?GetTexterNullStruct(此文本框txt,GlobalSist.Common.Utils.ParserCondition?ParserCondition,bool-throwOnValidation)
其中T:struct,i可比较
{
返回GlobalSist.Common.Utils.Parsers.ConvertStruct(
GetTextOrNull(txt)、parserCondition、throwOnValidation);
}
公共静态T?ConvertStruct(IConvertible值,ParserCondition?ParserCondition,bool-throwOnValidation)
其中T:struct,i可比较
{
尝试
{
如果((值==null)||
(值为string&&string.IsNullOrEmpty((string)值)))
{
如果(验证)
抛出新的ArgumentNullException(“值”);
其他的
返回null;
}
返回Parsers.Convert(值,parserCondition,true);
}
捕获(ArgumentOutOfRangeException)
{
如果(验证)
投掷;
其他的
返回null;
}
}
这里是转换为字符串的方法

public static T? GetTextOrNullStruct<T>(this TextBox txt, GlobalSist.Common.Utils.ParserCondition? parserCondition, bool throwOnValidation)
    where T : struct, IComparable<T>
{
    return GlobalSist.Common.Utils.Parsers.ConvertStruct<T>(
        GetTextOrNull(txt), parserCondition, throwOnValidation);
}


public static T? ConvertStruct<T>(IConvertible value, ParserCondition? parserCondition, bool throwOnValidation)
    where T : struct, IComparable<T>
{
    try
    {
        if ((value == null) ||
            (value is string && string.IsNullOrEmpty((string)value)))
        {
            if (throwOnValidation)
                throw new ArgumentNullException("value");
            else
                return null;
        }
        return Parsers.Convert<T>(value, parserCondition, true);
    }
    catch (ArgumentOutOfRangeException)
    {
        if (throwOnValidation)
            throw;
        else
            return null;
    }
}
publicstatict转换(IConvertible值,ParserCondition?ParserCondition,bool-throwOnValidation)
其中T:i可比较
{
T转换值;
尝试
{
convertedValue=(T)value.ToType(typeof(T),null);
}
捕获(例外情况除外)
{
如果(验证)
抛出新ArgumentOutOfRangeException(例如Message,ex);
其他的
返回默认值(T);
}
返回ValidateParserCondition(convertedValue、parserCondition、throwOnValidation);
}

编辑:忘记粘贴上次调用的方法


private static T ValidateParserCondition(T值,ParserCondition?ParserCondition,bool-throwOnValidation)
其中T:i可比较
{
if(parserCondition==null)
返回值;
其他的
{
int comparingToZero=value.comparieto(默认值(T));
开关(parserCondition.Value)
{
case ParserCondition.GreaterOrEqualToZero:
如果(比较Tozero>=0)
返回值;
打破
case ParserCondition.GreaterThanZero:
如果(比较Tozero>0)
返回值;
打破
case ParserCondition.LessOrEqualToZero:
如果(比较Tozero是,您可以。
我曾经遇到过您的问题,并为Textbox控件实现了一个扩展。
它是一种通用方法,可以转换为十进制、int或任何值类型

drTmp["empl_HRA"] = TryParse(txtHRA.Text, 6.5M);
public static T?getExterNullStruct(此文本框txt,GlobalSist.Common.Utils.ParserCondition?ParserCondition,bool-throwOnValidation)
其中T:struct,i可比较
{
返回GlobalSist.Common.Utils.Parsers.ConvertStruct(
GetTextOrNull(txt)、parserCondition、throwOnValidation);
}
公共静态T?ConvertStruct(IConvertible值、ParserCondition?ParserCondition、布尔验证)
其中T:struct,i可比较
{
尝试
{
如果((值==null)||
(值为string&&string.IsNullOrEmpty((string)值)))
{
如果(验证)
抛出新的ArgumentNullException(“值”);
其他的
返回null;
}
返回Parsers.Convert(值,parserCondition,true);
}
捕获(ArgumentOutOfRangeException)
{
如果(验证)
投掷;
其他的
返回null;
}
}
这里是转换为字符串的方法

public static T? GetTextOrNullStruct<T>(this TextBox txt, GlobalSist.Common.Utils.ParserCondition? parserCondition, bool throwOnValidation)
    where T : struct, IComparable<T>
{
    return GlobalSist.Common.Utils.Parsers.ConvertStruct<T>(
        GetTextOrNull(txt), parserCondition, throwOnValidation);
}


public static T? ConvertStruct<T>(IConvertible value, ParserCondition? parserCondition, bool throwOnValidation)
    where T : struct, IComparable<T>
{
    try
    {
        if ((value == null) ||
            (value is string && string.IsNullOrEmpty((string)value)))
        {
            if (throwOnValidation)
                throw new ArgumentNullException("value");
            else
                return null;
        }
        return Parsers.Convert<T>(value, parserCondition, true);
    }
    catch (ArgumentOutOfRangeException)
    {
        if (throwOnValidation)
            throw;
        else
            return null;
    }
}
publicstatict转换(IConvertible值,ParserCondition?ParserCondition,bool-throwOnValidation)
其中T:i可比较
{
T转换值;
尝试
{
convertedValue=(T)value.ToType(typeof(T),null);
}
捕获(例外情况除外)
{
如果(验证)
抛出新ArgumentOutOfRangeException(例如Message,ex);
其他的
返回默认值(T);
}
返回ValidateParserCondition(convertedValue、parserCondition、throwOnValidation);
}

编辑:忘记粘贴上次调用的方法


private static T ValidateParserCondition(T值,ParserCondition?ParserCondition,bool-throwOnValidation)
其中T:i可比较
{
if(parserCondition==null)
返回值;
其他的
{
int comparingToZero=value.comparieto(默认值(T));
开关(parserCondition.Value)
{
case ParserCondition.GreaterOrEqualToZero:
如果(比较Tozero>=0)
返回值;
打破
case ParserCondition.GreaterThanZero:
如果(比较Tozero>0)
返回值;
打破
case ParserCondition.LessOrEqualToZero:

如果(比较Tozero您可以根据需要使用一种方法,例如作为扩展方法:

public enum ParserCondition
{
    /// <summary>
    /// &gt;=0
    /// </summary>
    GreaterOrEqualToZero,
    /// <summary>
    /// &gt;0
    /// </summary>
    GreaterThanZero,
    /// <summary>
    /// &lt;=0
    /// </summary>
    LessOrEqualToZero,
    /// <summary>
    /// &lt;0
    /// </summary>
    LessThanZero,

}
现在您根本不需要显式变量声明,只需使用返回值:

public static Decimal? TryGetDecimal(this string item)
{
    Decimal d;
    bool success = Decimal.TryParse(item, out d);
    return success ? (Decimal?)d : (Decimal?)null;
}

如果需要,可以使用方法,例如作为扩展方法:

public enum ParserCondition
{
    /// <summary>
    /// &gt;=0
    /// </summary>
    GreaterOrEqualToZero,
    /// <summary>
    /// &gt;0
    /// </summary>
    GreaterThanZero,
    /// <summary>
    /// &lt;=0
    /// </summary>
    LessOrEqualToZero,
    /// <summary>
    /// &lt;0
    /// </summary>
    LessThanZero,

}
现在你不需要了