如何使用 if inside public object C# asp.net

how using if inside public object C# asp.net

我是 C# 新手,在 "public object" 方法中使用 if 时遇到问题,这是我的代码:

public object Login([FromBody] MailParameters data)
    {

        UmbracoDatabase db = ApplicationContext.DatabaseContext.Database;
        var select = new Sql("SELECT UserID FROM Users where Email='" + data.Email + "';");
        var ids = db.Fetch<listUsersChecks>(select);

        if (ids)
        {
        var getByEncrypt = new Sql("SELECT * FROM Users where Email='" + data.Email + "' AND password='" + data.Password + "';");
        var listue = db.Fetch<listUsers>(getByEncrypt);
        }else{
            var listue = "";
        }
        return listue;
    }

输出是:

error CS0029: Cannot implicitly convert type 'System.Collections.Generic.List<LoginController.listUsersChecks>' to 'bool'

错误在if(ids){,如何解决?

谢谢

查看错误消息,if 语句需要布尔值,但您输入的是列表。在这种情况下,您的 ids 是一个列表 List<LoginController.listUsersChecks>

由于是列表,您可以通过计算列表中的项目数来查看:

if(ids.Count >0){} else{}

var ids = db.Fetch<listUsersChecks>(select);

这会给你一个 List<listUsersChecks> 和一个 if 条件需要一个 bool 来评估它是否应该被执行。

如果你想在列表中有条目时执行 if 语句,你应该使用

if(ids.Count > 0)
{
    //logic
}

CountList 的 属性 并给出列表中的项目数。

为了更清楚你也可以这样写。

bool hasItems = ids.Count > 0;
if(hasItems)
{
    //logic
}

您也可以使用 LINQ 的 Any 方法。

Determines whether any element of a sequence exists or satisfies a condition.

看起来像

if(ids.Any())
{
    //logic
}

有关详细信息,请查看 101 LINQ-Samples

并非所有代码路径 return 一个值。你必须在 if 语句之前定义你的 return 对象,并且在每个分支中只设置 it.and 至于 ids,它本身不是一个有效的布尔表达式,你可以尝试 ids.Any()

您似乎希望 C# 支持 "truthy" 和 "falsey" 值,例如 Javascript。在C#中,没有"truthy"或"falsey"的概念。 if 中的表达式必须计算为布尔值 truefalse。你真正想要做的是使用像这样的 Linq 表达式:

if(ids.Any())
{
    ...
}