Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有一种方法仅在列表中的对象存在时才使用它?_C#_Linq - Fatal编程技术网

C# 是否有一种方法仅在列表中的对象存在时才使用它?

C# 是否有一种方法仅在列表中的对象存在时才使用它?,c#,linq,C#,Linq,我有一个对象列表,比如说数据表 仅当列表中的对象存在时,才可以使用该对象吗 例如,如果TableList包含5个名为a、b、c、d、e的数据表 if (TableList.Any(t => t.TableName == "a")) { TableList.First(t => t.TableName == "a").DoStuff(); //OR DataTable TheReturnOf_a = TableList.First(t => t.

我有一个对象列表,比如说数据表

仅当列表中的对象存在时,才可以使用该对象吗

例如,如果TableList包含5个名为a、b、c、d、e的数据表

if (TableList.Any(t => t.TableName == "a"))
{
     TableList.First(t => t.TableName == "a").DoStuff();

     //OR

     DataTable TheReturnOf_a = TableList.First(t => t.TableName == "a");
}
else if (TableList.Any(t => t.TableName == "f"))
{
     TableList.First(t => t.TableName == "f")).DoMoreStuff();
}

假设
TableList
的元素类型为引用类型,则可以使用
FirstOrDefault()
返回第一个匹配项或null,然后使用null条件运算符仅在目标为非null时调用该方法:

TableList.FirstOrDefault(t => t.TableName == "a")?.DoStuff();
因此,您的原始代码相当于:

var tableA = TableList.FirstOrDefault(t => t.TableName == "a");
if (tableA != null)
{
    tableA.DoStuff();
}
else
{
    TableList.FirstOrDefault(t => t.TableName == "f").DoStuff();
}
或者,如果您要对最终使用的表执行相同的操作,并且您只是尝试获取正确的表,则可以使用or null合并运算符:

// Find an "a" table if possible, but revert to an "f" table otherwise.
var table = TableList.FirstOrDefault(t => t.TableName == "a") ??
            TableList.FirstOrDefault(t => t.TableName == "f");
// Call DoStuff() on the table - handling the case where there isn't an
// "a" or an "f" table.
table?.DoStuff();

假设
TableList
的元素类型为引用类型,则可以使用
FirstOrDefault()
返回第一个匹配项或null,然后使用null条件运算符仅在目标为非null时调用该方法:

TableList.FirstOrDefault(t => t.TableName == "a")?.DoStuff();
因此,您的原始代码相当于:

var tableA = TableList.FirstOrDefault(t => t.TableName == "a");
if (tableA != null)
{
    tableA.DoStuff();
}
else
{
    TableList.FirstOrDefault(t => t.TableName == "f").DoStuff();
}
或者,如果您要对最终使用的表执行相同的操作,并且您只是尝试获取正确的表,则可以使用or null合并运算符:

// Find an "a" table if possible, but revert to an "f" table otherwise.
var table = TableList.FirstOrDefault(t => t.TableName == "a") ??
            TableList.FirstOrDefault(t => t.TableName == "f");
// Call DoStuff() on the table - handling the case where there isn't an
// "a" or an "f" table.
table?.DoStuff();

如果您的对象是引用类型,则可以使用<代码> FrestSurrue并检查返回值是否为NULL。您也可以考虑使用<代码>字典<代码>,其中键是 TabLeNeNe>代码>。如果<>代码> Tabelelist有大量的条目,并且你正在做大量的查找,这可能会有帮助。如果你的对象是引用类型,你可以使用<代码> FrestSurrue,并且检查返回的值不是NULL。你也可以考虑使用<代码>字典<代码>,其中键是<代码>表名< /C>。如果
TableList
有大量条目,并且您进行了大量查找,这可能会有所帮助。感谢您的回复。我非常感激。如果我真的需要根据它是哪个表运行不同的函数呢?@TheNextFreud:那么你应该按照我答案的中间部分使用if/else。如果您想在三个不同的表上执行操作,这将取决于您是否从
if
块返回,但最终可能会使用多个嵌套的if/else。如果我创建一个带有out参数的bool函数呢?这样,我的if语句将已经设置要使用的表,否则将转到下一个块@TheNextFreud:对不起,我不知道你的意思,但是请注意,我已经回答了你最初提出的问题-继续在评论中提出其他问题不是堆栈溢出的工作方式。如果你有另一个解决自己问题的方法,我建议你自己试试——如果你的问题可行,你可以为它添加一个答案。如果它不起作用,但你不明白为什么,问一个新问题。谢谢你的回答。我非常感激。如果我真的需要根据它是哪个表运行不同的函数呢?@TheNextFreud:那么你应该按照我答案的中间部分使用if/else。如果您想在三个不同的表上执行操作,这将取决于您是否从
if
块返回,但最终可能会使用多个嵌套的if/else。如果我创建一个带有out参数的bool函数呢?这样,我的if语句将已经设置要使用的表,否则将转到下一个块@TheNextFreud:对不起,我不知道你的意思,但是请注意,我已经回答了你最初提出的问题-继续在评论中提出其他问题不是堆栈溢出的工作方式。如果你有另一个解决自己问题的方法,我建议你自己试试——如果你的问题可行,你可以为它添加一个答案。如果它不起作用,但你不明白为什么,问一个新问题。