我提出这个问题的唯一原因是因为要有效地谷歌搜索它是非常难以表达的。
假设我有1000个不同的变量(1000个整数)并且说我们知道其中只有1个不是空的。
如何找到特定变量来获取其值?
我考虑过将所有这些变量插入到数组中并遍历它直到找到正确的变量,但我想知道是否有更有效的解决方案。
首先,我感谢大家的答案。我很抱歉,但我没有准确地描述我的问题。我有一个具有7个属性的对象(我只写了1000个以强调有超过3个变量的事实 - 显然我夸大了......)。无论如何,我可以检查这些属性中的每一个,或者我可以做...而不是?再次感谢,对不起,我误导了你们 - 我的坏人。
答案 0 :(得分:5)
var value = yourList.First(i => i != null);
认为您的列表是可以为空的类型(int?或类似)。
编辑:正如我的回答所提到的,您可以使用反射来获取所有属性,但由于您要求最佳解决方案,我会说您应该将变量填充到列表(或数组)中,并使用我的代码上面找到第一个非空的。
如果您必须确保只有一个非空,则可以使用Single()
,但如果您不需要仔细检查是否还有其他值,则First()
会更有效。
答案 1 :(得分:2)
这样你就不必浪费时间输入代码来在列表中添加变量,所以这是更有效的方法。
class Foo {
public int? A {get;set;}
public string B {get;set;}
}
Foo foo = new Foo {A = 1, B = "abc"};
foreach(var prop in foo.GetType().GetProperties()) {
if(prop.PropertyType == typeof(int?)) // int? can be changed bythe type of your variable
{
if(prop.GetValue(foo, null) == null) // null can be changed to your verification, == 0 whatever.
{
//do some
}
}
}
答案 2 :(得分:1)
var l = new List<int?>() { null, null, null, null, null, 1, null, null, null };
int?[] l2 = l.Where(x => x != null).ToArray();
Console.WriteLine(l2[0]);
如果您想获得多个变量,这是一个示例,如果您只需要一个,请考虑使用.First()
答案 3 :(得分:0)
var value = listOfNullables.Single(e => e.HasValue == true);
var value = listOfNullables.First(e => e.HasValue == true);