编程语言
首页 > 编程语言> > c#-错误“参数声明为in时参数是值”是什么意思?

c#-错误“参数声明为in时参数是值”是什么意思?

作者:互联网

在netstandard 2.0应用程序中,我具有以下属于静态类的方法:

public static class Argument 
{    
    /// <param name="inst">Inst.</param>
    /// <param name="instName">Inst name.</param>
    /// <exception cref="ArgumentException">
    /// Thrown if :
    /// <paramref name="inst" /> is not specified in a local time zone.
    /// </exception>
    public static void ThrowIfIsNotLocal(in DateTime inst, string instName)
    {
        if (inst.Kind != DateTimeKind.Local)
            throw new ArgumentException(instName, $"{instName} is not expressed in a local time-zone.");
    }
}

在运行.netcore 2.0的程序中,以下行会生成错误:

Argument.ThrowIfIsNotLocal(DateTime.Now, "timestamp");

argument is value while parameter is declared as in

为什么DateTime.Now导致错误出现?

解决方法:

方法签名指出需要通过引用而不是通过值传递参数.这意味着您需要具有某种可以被引用以传递到该方法的存储位置.

属性获取器的结果不是变量.它不是您可以参考的东西.这只是一个值,因此是错误消息.

您不仅需要拥有一个变量,还需要拥有一个变量,而且还需要在调用该方法时使用in关键字来表明您打算传递对该变量的引用,而不仅仅是传递变量的值.

var now = DateTime.Now;
ThrowIfIsNotLocal(in now, "");

当然,没有真正的理由首先要通过引用传递此变量.我建议不要这样做,只需按值传递参数即可.这样,当调用者只有一个值而不是一个变量时,就不需要经历所有这些事情.

标签:net-standard-2-0,net-core,c
来源: https://codeday.me/bug/20191025/1925379.html