Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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中使用if语句#_C# - Fatal编程技术网

C# 在动作C中使用if语句#

C# 在动作C中使用if语句#,c#,C#,我有一个bool变量\u settings.Value.UsePostgreSQL和方法 AddConfiguration(此IServiceCollection builder,操作dbContextOptionAction=null) 是否可以在带有操作的方法中使用if条件作为参数?大概是这样的: _settings.Value.UsePostgreSQL = true; var migrationsAssembly = typeof(Startup).GetTypeInfo().Assem

我有一个bool变量
\u settings.Value.UsePostgreSQL
和方法
AddConfiguration(此IServiceCollection builder,操作dbContextOptionAction=null)
是否可以在带有
操作的方法中使用
if
条件作为参数?大概是这样的:

_settings.Value.UsePostgreSQL = true;
var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;
services.AddConfiguration(builder =>
    _settings.Value.UsePostgreSQL ?
        builder.UseSqlServer(_settings.Value.ConnectionString, options =>
            options.MigrationsAssembly(migrationsAssembly)) :
        builder.UseNpgsql(_settings.Value.ConnectionString, options =>
            options.MigrationsAssembly(migrationsAssembly)));
当我试图实现这一点时,我有一个错误:

只有赋值、调用、递增、递减和新对象 表达式可以用作语句

在C#中,这是一个表达式,而不是一个语句。作为一个完整的语句,它不会编译。在Perl和其他语言中都可以,但语法是任意的,所以不能可靠地从一种语言概括到另一种语言

a ? b : c;
它不是一个“如果语句”;这是一个好主意。这是带有if语句的代码;我希望这个版本能为您编译,但请告诉我

services.AddConfiguration(builder =>
{
    if (_settings.Value.UsePostgreSQL) {
        builder.UseSqlServer(_settings.Value.ConnectionString, 
            options => options.MigrationsAssembly(migrationsAssembly));
    } else {
        builder.UseNpgsql(_settings.Value.ConnectionString, 
            options => options.MigrationsAssembly(migrationsAssembly));
    }
});
看起来
services.AddConfiguration()
需要的是
操作,而不是
Func
,因此编译器将要求lambda的主体是语句,而不是表达式

这是一条包含条件表达式的语句,它将编译:

var d = a ? b : c;

这就是条件运算符的作用,但它不是您想要做的

我甚至没有看到一个if语句可能与“由于不清楚你在问什么而暂停”重复。“真的吗?”埃德普朗基特似乎有大量错误的封闭式问题涌入。您可能认为用户在投票关闭
”之前会仔细阅读一个问题\_(ツ)_/“
@EdPlunkett看看昨天的情况。我还在为此愤怒。5个人投票决定重新开放,一个人回来又把它关了