9

如何检查一行中的整数?

sample.AddRange(Statistics.Select(player => new Stats
                       {
                         SeasonFromYear = Convert.ToInt32(seasonFromYear)
                       }

这个对我有用。

int a;
SeasonFromYear = int.TryParse(seasonFromYear, out a) ? a : default(int);  

但是对于每个属性,我都需要声明一个变量,例如a. 没有它,是否可以签入一行?

像这样的东西

 sample.AddRange(Statistics.Select(player => new Stats
                       {
                         SeasonFromYear = is integer ? then value : else default value 
                       }
4

4 回答 4

7

您可以创建扩展方法:

public static int ToInt(this string v)
{
    int a = 0;
    int.TryParse(v, out a);
    return a;
}

接着:

int number = "123".ToInt();

编辑

或者您可以将整数作为输出参数传递:

public static bool ToInt(this string v, out int a)
{
    return int.TryParse(v, out a);  
}

用法:

int number = 0;
"123".ToInt(out number);
于 2013-08-09T05:51:49.320 回答
4

那没有必要。如果int.TryParse失败,a将设置为default(int)。只需使用:

int a;
int.TryParse(sessionFromYear, out a);
SeasonFromYear = a;

或者,如果您真的想在一行中执行此操作,则必须创建自己的包装器方法:

public static int TryParseInline(string in) {
    int a;
    int.TryParse(sessionFromYear, out a);
    return a;
}

...

sample.AddRange(Statistics.Select(player => new Stats
{
    SeasonFromYear = Util.TryParseInline(seasonFromYear),
    ...
})
于 2013-08-09T05:09:26.253 回答
1

您是否尝试过使用安全强制转换并在一行中进行空合并检查?

SeasonFromYear = seasonFromYear as int ?? default(int);
于 2013-08-09T05:34:28.260 回答
0

尝试:

int.TryParse(sessionFromYear, out SessionFromYear)

如果SessionFromYear可以是一个属性,只需创建一个方法来完成您需要做的事情 - 例如:

public int ParseInt(string input)
{
    int value;
    int.TryParse(input, out value);

    return value;
} 

然后你可以像这样到处使用这个方法:

SessionFromYear = ParseInt(sessionFromYear);

如果你想让它真的很花哨,你甚至可以在字符串类上创建一个扩展方法,然后做类似的事情sessionFromYear.ToInt()

于 2013-08-09T05:11:47.700 回答