错误 "argument is value while parameter is declared as in" 是什么意思?
What does the error "argument is value while parameter is declared as in" mean?
在 netstandard 2.0
应用程序中,我有以下方法是静态 class 的一部分:
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
导致出现错误?
方法签名声明参数需要通过引用传递,而不是通过值传递。这意味着您需要有某种可以引用的存储位置以传递给该方法。
属性getter的结果不是变量;这不是您可以参考的东西。它只是一个值,因此是错误消息。
你需要有一个变量,而不仅仅是一个值,并且在调用方法时使用 in
关键字来表明你打算传递对变量的引用,而不是只是变量的值。
var now = DateTime.Now;
ThrowIfIsNotLocal(in now, "");
当然,一开始就没有真正的理由通过引用传递这个变量。我建议不要这样做,而只是按值传递参数。这样,当调用者只有一个值而不是一个变量时,他们就不需要经历所有这些。
在 netstandard 2.0
应用程序中,我有以下方法是静态 class 的一部分:
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
导致出现错误?
方法签名声明参数需要通过引用传递,而不是通过值传递。这意味着您需要有某种可以引用的存储位置以传递给该方法。
属性getter的结果不是变量;这不是您可以参考的东西。它只是一个值,因此是错误消息。
你需要有一个变量,而不仅仅是一个值,并且在调用方法时使用 in
关键字来表明你打算传递对变量的引用,而不是只是变量的值。
var now = DateTime.Now;
ThrowIfIsNotLocal(in now, "");
当然,一开始就没有真正的理由通过引用传递这个变量。我建议不要这样做,而只是按值传递参数。这样,当调用者只有一个值而不是一个变量时,他们就不需要经历所有这些。