在一种方法中,我们正在接收Array of Strings
。在这个数组中,我们必须返回第一个值Double
示例:
String[] myArray = {"abc", "def" , "1.0", "1.1" }; output:1.0
String[] myArray2 = {"abc", "def" , "ij" , "57.0"}; output:57.0
String[] myArray3 = {"11.1","abc", "def" , "ij" , "57.0"}; output:11.1
为实现此目的,我们使用以下代码:
Double i = 0;
foreach(String s in myArray)
{
Double.TryParse(s, out i);
if (i > 0)
{ return i; }
}
我想知道是否有更短的方法来达到相同的结果? 谢谢你的时间!
答案 0 :(得分:4)
double n;
string d = myArray.First(x => double.TryParse(x, out n))
您可以返回n
,它将等于第一个有效double
的值。顺便说一句,在您的示例中,如果i > 0
您正在检查,则应检查TryParse
的结果以及 true 是否返回i
。
编辑:正如评论中所建议的那样,如果数组中没有有效数字,First
方法将抛出异常。如果是这种情况,您可以使用FirstOrDefault
并检查结果:
string d = myArray.FirstOrDefault(x => double.TryParse(x, out n))
if(d != null) return n;
else /* return a default value */
答案 1 :(得分:1)
另一种方式:
double n;
var doubleFound = myArray.Any(x => double.TryParse(x, out n));
这里,它只关心是否找到了double,而不是返回一个字符串。但它纯粹取决于你想做什么。
只是因为有人想知道,我在LinqPad中对此进行了测试,它确实返回了列表中的第一个双倍。
我觉得使用这种方法或FirstOrDefault
归结为两件事:
主要区别在于,您将返回它在数组中找到的结果(FirstOrDefault
),第二个只会说明是否找到了一个结果。